在内存中分配静态和自动数组

时间:2013-10-30 07:05:56

标签: c arrays memory-management

我做了以下代码来检查内存中的数据分配。我有一个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;
}

1 个答案:

答案 0 :(得分:3)

这与堆栈大小有关。

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

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

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