由编译器决定。Go 语言编译器会自动决定把一个变量放在栈还是放在堆,编译器会做逃逸分析(escape analysis),当发现变量的作用域没有超出函数范围,就可以在栈上,反之则必须分配在堆上。

func foo() *int {
    v := 11
    return &v
}

func main() {
    m := foo()
    println(*m) // 11
}

foo() 函数中,如果 v 分配在栈上,foo 函数返回时,&v 就不存在了,但是这段函数是能够正常运行的。Go 编译器发现 v 的引用脱离了 foo 的作用域,会将其分配在堆上。因此,main 函数中仍能够正常访问该值。


关于收费
微薄收入,仅用于维持服务器。本站模型区全部免费
关于VIP
VIP可以免费下载。月度、年度vip每天可免费下载9次,应该够用。终身vip每天可下载19次,右侧成为vip
注意,请不要重复点击某个资源的下载按钮,每次点击都会计入次数
资源失效处理
1、如果是蓝奏云,将下载链接中的lanzous换成lanzoux即可
2、如果是百度云失效了,那请点右侧发邮件给客服,或者在评论区指出,也可在菜单栏【有问必答】说明
3、如果是其他原因,请右侧按钮发邮件给我

发表评论