全局数组是否在堆栈上分配

pHb*_*its 3 c memory-management

显然,所有本地数组(未动态分配)都在堆栈中,但是也是位于堆栈上的全局数组?

其他类型的全局变量都在堆上,但我得到的提示是数组是一个不同的故事,并分配在堆栈的底部.那是真的吗?

同样,我不是在谈论总是在堆上的动态分配的.

Dav*_*nan 6

不,全局数据未在堆栈上分配.它们是静态分配的,内存在编译时保留.

考虑这个问题的一个简单方法是考虑线程.每个线程有一个堆栈.但是线程之间共享全局数据.因此无法在堆栈上分配全局数据.

其他类型的全局变量在堆上.

不是这样.永远不会在堆上分配全局数据.堆分配在运行时动态执行.

也许你有一个指针全局变量.并为该指针分配动态数组.在该场景中,指针是全局的,但该数组是动态堆分配的对象.

所以也许你有这样的代码:

int *arr;
....
arr = calloc(N, sizeof(int));
Run Code Online (Sandbox Code Playgroud)

在那种情况下,arr是一个全局对象,但是*arr已分配堆.