对于全局变量:
引用类型的全局变量分配在堆上
值类型的全局变量分配在栈上
对于局部变量,要具体情况具体分析,它不取决于是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条)