返回指向 Go 中本地结构体的指针
在 Go 中,诸如此类的构造用于创建和返回指向本地结构体的指针:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
虽然这在 C 中可能看起来是错误的做法,但Go 中的语义不同。
指针逃逸分析和内存分配
Go 使用指针逃逸分析来确定指针是否逃逸本地堆栈范围。在上面的例子中,newPoint()返回的指针确实逃逸了本地函数。结果,对象被分配在堆上。
但是,如果指针保留在函数的范围内(即,它不会逃逸),则编译器可以自由分配对象在堆栈上。但是,需要注意的是,编译器不能保证这一点。
因此,内存分配取决于指针逃逸分析是否可以明确得出指针仍然是函数本地的结论。在指针确实逃逸的情况下,例如在提供的示例中,该对象将在堆上分配。
以上是Go 如何处理本地结构体的返回指针?的详细内容。更多信息请关注PHP中文网其他相关文章!