美文网首页
golang 定义的局部变量是在栈中还是堆中?

golang 定义的局部变量是在栈中还是堆中?

作者: 我爱张智容 | 来源:发表于2021-05-22 19:47 被阅读0次

先看这两个代码:


image.png image.png

这两段代码只是调用的打印函数不一样,但是局部变量一个放在堆中,一个是放在栈中的。

直接说原因:go语言编译器会做逃逸分析,分析局部变量的作用域是否逃出了函数的作用域,要是没有就放到栈上,要是超出了函数的作用域就自动放到堆上。fmt.println函数使局部变量的作用域超出了函数的作用域,所以局部变量是在堆上。而println是内联函数,并没有使局部变量的作用域逃出函数的作用域,所以是在栈上。

相关文章

  • golang 定义的局部变量是在栈中还是堆中?

    先看这两个代码: 这两段代码只是调用的打印函数不一样,但是局部变量一个放在堆中,一个是放在栈中的。 直接说原因:g...

  • Go 学习

    go语言局部变量分配在栈还是堆Golang 垃圾回收剖析go语言坑之for range

  • 2018-09-29

    在C/C++中,内存一般分为:堆区,栈区,全局区,文字长量区,程序代码区。 在函数中定义的局部变量是存在在栈区(除...

  • java03(java内存机制与数组排序)

    java内存机制(栈内存,堆内存,方法区): 栈内存(stack):存放函数中定义的局部变量,一旦超出作用...

  • Java中内存分配

    栈 存储局部变量 局部变量:定义在方法声明上和方法中的变量 堆 存储 new 出来的对象如果没有任何引用指针指向改...

  • oc消息机制

    内存分区 1栈 局部变量 2堆alloc分配地址 在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函...

  • Java中的内存分配

    栈 存储局部变量局部变量是定义在方法中或者语句中的变量局部变量使用完毕,立即收回还有个成员变量,是定义在方法外的变...

  • 详解JVM内存管理与垃圾回收机制4 - References(上

    Java通过new关键字来创建对象时,JVM在堆中开辟空间存放对象实例数据,这时,定义的局部变量仍存储在栈中,它包...

  • 堆&栈

    (1)栈内存用来存储局部变量和方法调用。 (2)堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变...

  • JVM中堆和栈的区别

    Java语言基础(Java中的内存分配以及栈和堆的区别) A:栈 存储局部变量 是存放方法的局部变量的内存空间,每...

网友评论

      本文标题:golang 定义的局部变量是在栈中还是堆中?

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