← 返回首页

Go中 内存逃逸是什么,怎么发生的

内存逃逸是编译器在程序编译时期根据逃逸分析策略,将原本应该分配到栈上的对象分配到堆上的一个过程

主要逃逸场景:

  • 返回局部变量指针:函数返回内部变量的地址,变量必须逃逸到堆上
  • interface{}类型:传递给interface{}参数的具体类型会逃逸,因为需要运行时类型信息
  • 闭包引用外部变量:被闭包捕获的变量会逃逸到堆上
  • 切片/map动态扩容:当容量超出编译期确定范围时会逃逸
  • 大对象:超过栈大小限制的对象直接分配到堆上