参考答案
结论:Go逃逸分析在编译期判定变量分配位置,常见逃逸情况如下:1) 函数返回局部变量指针(如 return &localVar);2) 变量尺寸编译期未知(如 make([]int, n) 且n为变量)或栈空间不足;3) 变量被发送到通道、赋值给接口(interface{} 装箱);4) 闭包引用外部变量且闭包生命周期超出函数;5) 在切片/map中存储指针或反射使用。原理:编译器通过数据流分析对象作用域,若逃逸出当前栈帧则分配堆。对比栈分配自动回收,堆分配依赖GC。使用-gcflags=-m可定位。