一个内存地址的问题

330 天前
 jiang1234321

package main

import ( "fmt" )

func test() *int { a := int(1) return &a } func main() { b := test() fmt.Printf("%d\n", *b) }

如上代码, 这里按理 test 内的变量都是栈空间,函数跑完就释放了。但是这个代码还能正常编译运行。 这是为啥? 是不是编译器做了栈逃逸,实际分配还是在堆空间?

1214 次点击
所在节点    程序员
2 条回复
hsfzxjy
330 天前
> 是不是编译器做了栈逃逸,实际分配还是在堆空间?

是的
lincanbin
330 天前
是逃逸了,golang 编译器提供了逃逸分析工具,你可以结合这个工具来理解程序的实际运行情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945581

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX