栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

变量分配在堆还是栈?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

变量分配在堆还是栈?

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

对于局部变量,要具体情况具体分析,它不取决于是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等,感兴趣的同学可以去了解一下
  • 垃圾回收都是针对堆的
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号