知识卡片

局部变量指针可以安全逃逸

专业/工作 · 1372.a.1

内容

在 Go 中,一个函数可以把指向自己局部变量的指针作为返回值交出去,即使这个函数已经返回、 局部变量本该随栈帧销毁而失效,只要外部还持有这个指针,Go 就会保证这块内存继续有效、可以 安全访问。发散:这解决了 C 语言里经典的”返回局部变量地 址导致悬空指针”这类未定义行为——语言把”这块内存该存活多久”的判断权从程序员手里收回,交 给运行时按引用关系自动决定,用运行时开销换取了内存安全。

参考来源

- 位置:《Head First Go语言程序设计》第3章《调用:函数》(源文件:_epub-src/index_split_001.html) - 结论依据:原文在该章节围绕“在Go中,一个函数可以把指向自己局部变量的指针作为返回值交出去,即使这个函数已经返回、局部变量本该随栈帧销毁而…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:Liters(240.0))和 Liters(Gallons(240.0))没有区别。简单地把值从一个类型转换到另 一个类型使针对这个类型应该出现的错误保护机制失效。 相反,你需要执行任何必需的操作将基础类型值转换为你想要转换 的类型。 一个快速的页面查找显示,一升大约等于0.264加仑,并且一加仑 等于3.785升。我们可以乘上这些转换…