package main
import ( "fmt" )
func test() *int { a := int(1) return &a } func main() { b := test() fmt.Printf("%d\n", *b) }
如上代码, 这里按理 test 内的变量都是栈空间,函数跑完就释放了。但是这个代码还能正常编译运行。 这是为啥? 是不是编译器做了栈逃逸,实际分配还是在堆空间?
1
hsfzxjy 2023-06-04 01:50:42 +08:00 via Android
> 是不是编译器做了栈逃逸,实际分配还是在堆空间?
是的 |
2
lincanbin 2023-06-04 02:10:40 +08:00
是逃逸了,golang 编译器提供了逃逸分析工具,你可以结合这个工具来理解程序的实际运行情况。
|