登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-16 19:56:29 239浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《从函数中的局部变量返回指针》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下golang,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

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

函数返回局部变量的地址是完全安全的。例如,在下面的代码中,这个对 f 的特定调用创建的局部变量 v 即使在调用返回之后仍然存在,并且指针 p 仍然会引用它:

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

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

正确答案

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

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

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

今天关于《从函数中的局部变量返回指针》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>