全局数组在栈上分配吗?

3

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

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

再次强调,我不是在谈论动态分配的数组,它们总是在堆上。


请查看此链接:http://stackoverflow.com/a/18479996/1814023 - user1814023
2个回答

7
不,全局数据并非在栈上分配。它们是静态分配的,并且内存在编译时保留。
这个问题可以通过考虑线程来帮助理解。每个线程都有一个堆栈,但全局数据在线程之间共享。因此,全局数据不能在堆栈上分配。
其他类型的全局变量可能会在堆上分配。
不是这样的。全局数据从未在堆上分配。堆分配是在运行时动态执行的。
也许你有一个指针型全局变量。你将动态数组赋给该指针。在这种情况下,指针是一个全局变量,而数组是一个动态堆分配对象。
所以,也许你的代码像这样:
int *arr;
....
arr = calloc(N, sizeof(int));

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

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接