在C中定义一个大的整数数组

时间:2017-03-28 21:33:54

标签: c arrays

我试图在堆上定义一个N = 1000000000个整数的数组。我的代码如下:

#define N 1000000000
int A[N];

但是当我尝试编译代码时出现以下错误:

enter image description here

这适用于较小的数字,为什么它现在不起作用?

编辑:经过建议,我已经定义了A这样:

int *A = malloc(4000000000ULL);

我现在收到错误:Initializer元素不是常量。还应该注意,这是一个全局数组。

2 个答案:

答案 0 :(得分:1)

假设int为32位,您尝试分配4GB空间。并且你在堆上分配它。您需要致电malloc来执行此操作。如果在函数中声明了此变量,则会在堆栈上分配此空间。这太大了。

答案 1 :(得分:0)

您声明的数组是在堆栈上分配的,而不是堆。通过调用malloc来在堆上分配内存。

这会导致您在此处看到错误,因为堆栈的最大大小不仅受可用RAM数量的限制。根据{{​​3}},每个线程都有一个最大堆栈大小,这是可配置的(或者可以是MSDN docs)。

在实践中,在堆栈上声明这样的数组是不常见的。