Golang逃逸分析

简介

编译代码时,编译器根据分析,判断将变量分配在上。

一般情况

函数定义中,一般将局部变量和参数分配到栈上(stack frame)上。但是,如果编译器不能确定在函数返回(return)时,变量是否被引用(reference),分配到堆上;如果局部变量非常大,也应分配在堆上。

如果对变量取地址(*和&操作),则有可能分配在堆上。此外,还需要进行逃逸分析(escape analytic),判断return后变量是否被引用,不引用分配到栈上,引用分配到堆上。

上面的分析总结自Go FAQ-Heap and Stack

Golang里的逃逸分析

TBD

Reference

comments powered by Disqus