变量分配在堆还是栈?

变量分配在堆还是栈?,第1张

变量分配在堆还是栈?

对于全局变量
引用类型的全局变量分配在堆上
值类型的全局变量分配在栈上

对于局部变量,要具体情况具体分析,它不取决于是var还是new出来,
以下面代码为例:

  • x在函数结束后,仍会被包级别的global使用,也就是局部变量x从函数f中逃逸了,那x必须分配在堆上
  • 与之对应的*y在函数g结束后将不再可达,也就是会被立即回收,因此在栈上分配空间
var global *int

func f() {
    var x int
    x = 1
    global = &x
}

func g() {
    y := new(int)
    *y = 1
}

一点说明:

  • 栈:由 *** 作系统分配和释放
  • 堆:由程序员自己搞定(C/C++),当然一些语言提供了较完善的GC机制,比如Java、Golang、Python等,感兴趣的同学可以去了解一下
  • 垃圾回收都是针对堆的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5672167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存