0

我做了以下代码来检查内存中的数据分配。我有一个 RAM,4 GB我了解到外部变量存储在内存的静态数据空间中,而自动变量存储在堆栈上。
一个gcc -v命令给出Thread model: win32。如果我使用auto_array,程序就会崩溃。但它不会发生在ext_array. 我怎么知道内存的确切大小stack和静态数据空间?还有其他影响分配的因素吗?

#include <stdio.h>
#define MB 1024*1024

char ext_array[1*1024*MB];

int main()
{
    //char auto_array[10*MB];
    return 0;
}
4

1 回答 1

3

这与堆栈大小有关。

对于全局数组,数据段中的部分是在程序启动时预先分配的。而对于自动变量,它是在调用函数(在您的情况下为 main )时分配的。

根据您的链接器命令文件,将定义最大堆栈大小。如果该大小小于 1 GB,则在函数调用时,将分配堆栈帧,这通常会侵占堆。

如果必须使用自动变量,请检查编译器的链接器命令文件并查看是否可以编辑堆栈大小。

于 2013-10-30T07:15:44.620 回答