Go 逃逸分析

对于一个 Go 局部变量,如何确定它被分配在堆上还是栈上?

按照官方 FAQ How do I know whether a variable is allocated on the heap or the stack? 的解释:

  • Go 编译器会尽可能将变量分配在栈上
  • 以下两种情况,Go 编译器会将变量分配在堆上
    • 如果一个变量被取地址(has its address taken),并且被逃逸分析(escape analysis)识别为 “逃逸到堆”(escapes to heap)
    • 如果一个变量很大(very large)

 

详细讲解请看下面这几篇文章:

Go内存管理之代码的逃逸分析 (微信公众号 - 网管叨bi叨)

Golang 内存分配之逃逸分析 - 知乎 (zhihu.com)

如何确定一个 Go 变量会被分配在哪里? | RussellLuo

通过实例理解Go逃逸分析 (微信公众号 -TonyBai)

posted @   拾月凄辰  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2020-10-20 剑指 Offer 07. 重建二叉树
2020-10-20 剑指 Offer 06. 从尾到头打印链表
2020-10-20 剑指 Offer 15. 二进制中1的个数
2019-10-20 IDEA快速定位错误快捷键
2018-10-20 另类循环队列
2018-10-20 LeetCode 234. 回文链表
2018-10-20 LeetCode 237. 删除链表中的节点
点击右上角即可分享
微信分享提示
主题色彩