gpt4 book ai didi

pointers - 从函数中的局部变量返回指针

转载 作者:IT王子 更新时间:2023-10-29 02:26:09 26 4
gpt4 key购买 nike

我正在读一本名为 The Go Programming Language 的书,在关于指针的第 2 章中写了以下内容

It is perfectly safe for a function to return the address of a local variable. For instance, in the code below, the local variable v created by this particular call to f will remain in existence even after the call has returned, and the pointer p will still refer to it:

var p = f()
func f() *int {
v := 1
return &v
}

我完全不明白,一个局部变量应该在函数执行后被销毁。是不是因为 v 分配在堆上。我知道在 C 中,如果您使用 malloc 分配空间,它不会在函数执行后被销毁,因为它在堆上。

最佳答案

Go 不是 C。尽管有相似之处,但它的级别要高得多。它利用带有绿色线程调度程序和垃圾收集内存管理器的完整运行时。只要它有实时引用,它就永远不会收集内存。

Go 编译器包括一个称为“逃逸分析”的阶段,它跟踪每个变量以查看它是否“逃逸”了声明它的函数。任何可以逃逸的值都分配在堆上并由垃圾收集管理;否则,它(通常)分配在堆栈上。

您可以找到有关该主题的更多信息:

关于pointers - 从函数中的局部变量返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com