返回指向本地结构体的指针
在 Go 中,类似下面的代码片段可能会引起具有 C 背景的程序员的关注:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
问题出现了: newPoint 是在堆栈上分配一个新点还是堆?
指针逃逸分析
答案就在Go的指针逃逸分析中。它检查函数并确定指针变量是否逃逸本地堆栈。如果是,则将该对象分配在堆上,确保整个程序的内存安全。
在此代码示例中,指针变量会转义本地堆栈,因为它返回给调用者。因此,Go 会将指针结构分配在堆上以保证内存安全。
如果指针没有逃逸本地函数,编译器将可以自由地将其分配在堆栈上。然而,分配位置并不能保证,因为它取决于指针逃逸分析的精度。
以上是Go 的 newPoint() 是在堆栈还是堆上分配结构体吗?的详细内容。更多信息请关注PHP中文网其他相关文章!