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

时间:2014-04-30 09:16:21

标签: c memory-management

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

  

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

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

也许你有一个指针全局变量。并为该指针分配动态数组。在那种情况下,指针是全局的,但该数组是动态堆分配的对象。

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

int *arr;
....
arr = calloc(N, sizeof(int));

在这种情况下,arr是一个全局对象,但*arr是堆分配的。

答案 1 :(得分:2)

Other types of global variable are on the heap - 这不是真的,它们会在data segment中分配。我相信数组也在那里分配