在Go 语言中,函数返回局部变量的指针是安全的。这是因为 Go 的编译器和运行时系统知道这个局部变量将会在函数外部被引用,所以不会将其分配在栈上,而是会将其分配在堆上,这样即使函数返回了,局部变量的内存空间依然存在。 以下是一个示例: func NewInt() *int { var x int return &x } func main() { p ...
一般来说,局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。 但这在 Go 中是安全的,Go 编译器将会对每个局部变量进行逃逸分析。如果发现局部变量的作用域超出该函数,则不会将内存分配在栈上,而是分配在堆上,因为他们不在栈区,即使释放函数,其内容也不会受影响。 一...
在Go 语言中,返回函数的局部变量的指针是安全的。当函数返回一个局部变量的地址时,Go 运行时会在堆上分配内存空间以存储这个变量,这样即使函数执行完毕,这个变量的值仍然可以通过它的指针访问。 这是因为 Go 语言的垃圾收集器(Garbage Collector)使用了逃逸分析(Escape Analysis)。逃逸分析会在编译阶段确定变量应该分配...