Go的逃逸分析

Go语言的局部变量是分配到栈上还是堆上?

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

1
2
3
4
5
6
7
8
9
func foo() *int {
v := 100
return &v
}

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

foo函数中,如果v分配在栈上,foo函数返回时,&v就会不存在,但这段程序是可以正常运行的。Go编译器会发现v的引用脱离了foo的作用域,会将其分配到堆上。


Go的逃逸分析
http://example.com/2023/11/05/Go的逃逸分析/
作者
Forrest
发布于
2023年11月5日
许可协议