Go的逃逸分析
Go语言的局部变量是分配到栈上还是堆上?
这由编译器决定。GO语言的编译器会决定分配到栈上还是堆上,编译器会做逃逸分析(escape analysis),当发现变量的作用域没有超出函数的范围,可以在栈上,反之必须在堆上。
1 |
|
foo函数中,如果v分配在栈上,foo函数返回时,&v就会不存在,但这段程序是可以正常运行的。Go编译器会发现v的引用脱离了foo的作用域,会将其分配到堆上。
Go的逃逸分析
http://example.com/2023/11/05/Go的逃逸分析/