美文网首页
如何才能知道go程序中一个变量被分配到堆上还是栈上

如何才能知道go程序中一个变量被分配到堆上还是栈上

作者: golang推广大使 | 来源:发表于2019-04-11 23:00 被阅读0次

    从正确的角度来讲,你不需要知道。go语言中每一个变量只要还有对他的使用,他就会一直存在。实现选择的存储位置的是与语言的语义没有关系的。
    存储位置对写高性能程序并没有影响。如果可能,Go编译器将为该函数的堆栈帧中的函数分配本地变量。但是,如果编译器在函数返回后无法证明变量未被引用,则编译器必须在垃圾收集堆上分配变量以避免悬空指针错误。此外,如果局部变量非常大,将它存储在堆而不是堆栈上可能更有意义。
    在当前的编译器中,如果变量具有其地址,则该变量是堆上分配的候选变量。但是,基本的转义分析可以识别某些情况,这些变量不会超过函数的返回值并且可以驻留在堆栈上。

    相关文章

      网友评论

          本文标题:如何才能知道go程序中一个变量被分配到堆上还是栈上

          本文链接:https://www.haomeiwen.com/subject/mayfwqtx.html