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)

原文地址:https://www.cnblogs.com/FengZeng666/p/15429419.html