我做了以下代码来检查内存中的数据分配。我有一个4 GB
的RAM,我了解到外部变量存储在内存的静态数据空间中,自动变量存在于堆栈中。
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;
}
答案 0 :(得分:3)
这与堆栈大小有关。
对于全局数组,在程序启动时预先分配数据段中的部分。然而,对于自动变量,它会在函数(在您的情况下为main)被调用时被分配。
根据您的链接器命令文件,将定义最大堆栈大小。如果该大小小于1 GB,那么在函数调用时,堆栈帧将被分配,这通常会侵入堆。
如果必须使用自动变量,请检查编译器和链接器的链接器命令文件。看看你是否可以编辑堆栈大小。