变量分配在堆还是栈?

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

对于局部变量,要具体情况具体分析,它不取决于是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等,感兴趣的同学可以去了解一下
  • 垃圾回收都是针对堆的
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值