显然,所有本地数组(未动态分配)都在堆栈中,但也是位于堆栈上的全局数组?
其他类型的全局变量在堆上,但我得到的提示是数组是一个不同的故事,并分配在堆栈的底部。这是真的吗?
同样,我不是在谈论总是在堆上的动态分配的。
答案 0 :(得分:6)
不,全局数据未在堆栈上分配。它们是静态分配的,内存在编译时保留。
考虑这个问题的一个简单方法是考虑线程。每个线程有一个堆栈。但是线程之间共享全局数据。因此无法在堆栈上分配全局数据。
其他类型的全局变量在堆上。
不是这样。永远不会在堆上分配全局数据。堆分配在运行时动态执行。
也许你有一个指针全局变量。并为该指针分配动态数组。在那种情况下,指针是全局的,但该数组是动态堆分配的对象。
所以也许你有这样的代码:
int *arr;
....
arr = calloc(N, sizeof(int));
在这种情况下,arr
是一个全局对象,但*arr
是堆分配的。
答案 1 :(得分:2)
Other types of global variable are on the heap
- 这不是真的,它们会在data segment中分配。我相信数组也在那里分配