pHb*_*its 3 c memory-management
显然,所有本地数组(未动态分配)都在堆栈中,但是也是位于堆栈上的全局数组?
其他类型的全局变量都在堆上,但我得到的提示是数组是一个不同的故事,并分配在堆栈的底部.那是真的吗?
同样,我不是在谈论总是在堆上的动态分配的.
不,全局数据未在堆栈上分配.它们是静态分配的,内存在编译时保留.
考虑这个问题的一个简单方法是考虑线程.每个线程有一个堆栈.但是线程之间共享全局数据.因此无法在堆栈上分配全局数据.
其他类型的全局变量在堆上.
不是这样.永远不会在堆上分配全局数据.堆分配在运行时动态执行.
也许你有一个指针全局变量.并为该指针分配动态数组.在该场景中,指针是全局的,但该数组是动态堆分配的对象.
所以也许你有这样的代码:
int *arr;
....
arr = calloc(N, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
在那种情况下,arr是一个全局对象,但是*arr已分配堆.
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |