变量是如何分配

今天看到 《Go程序设计语言– 艾伦 A. A. 多诺万 》 (看的是中译版,P26, P27)有句话:

编译器可以选择使用堆或栈上的空间来分配,令人惊奇的是,这个选择不是基于使用 var 或 new 关键字来声明变量。

任何情况下,逃逸的概念使你不需要额外费心来写正确的代码,但要记住它在性能优化的时候是有好处的,因为每一次变量逃逸都需要一次额外的内存分配过程。

什么是逃逸分析

维基百科

逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针

作用域与生命周期

不要将作用域和生命周期混淆。声明的作用域是声明在程序文本中出现的区域,它是一个编译时的属性。变量的生命周期是变量在程序执行期间能被程序的其他部分所引用的起止时间,它是一个运行时属性。

参考资料

Golang逃逸分析