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

C 是否在堆栈上分配了全局数组,c,memory-management,C,Memory Management,显然,所有本地数组(不是动态分配的)都在堆栈上,但是全局数组也在堆栈上吗 堆上还有其他类型的全局变量,但我得到的提示是,数组是不同的故事,分配在堆栈的底部。这是真的吗 同样,我不是说动态分配的变量总是在堆上。其他类型的全局变量也在堆上-这不是真的,它们是在堆中分配的。我相信数组也在那里分配不,全局数据不在堆栈上分配。它们是静态分配的,并且在编译时保留内存 思考这个问题的一个简单方法是考虑线程。每个线程有一个堆栈。但全局数据在线程之间共享。因此,无法在堆栈上分配全局数据 堆上还有其他类型的全局变量

显然,所有本地数组(不是动态分配的)都在堆栈上,但是全局数组也在堆栈上吗

堆上还有其他类型的全局变量,但我得到的提示是,数组是不同的故事,分配在堆栈的底部。这是真的吗


同样,我不是说动态分配的变量总是在堆上。

其他类型的全局变量也在堆上
-这不是真的,它们是在堆中分配的。我相信数组也在那里分配

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

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

堆上还有其他类型的全局变量

不是这样。全局数据从不在堆上分配。堆分配在运行时动态执行

也许您有一个指针全局变量。然后为指针指定一个动态数组。在这种情况下,指针是全局的,但数组是动态堆分配的对象

因此,也许您有这样的代码:

int *arr;
....
arr = calloc(N, sizeof(int));
在这种情况下,
arr
是一个全局对象,但
*arr
是堆分配的。

检查此链接