标签: c arrays
我试图在堆上定义一个N = 1000000000个整数的数组。我的代码如下:
#define N 1000000000 int A[N];
但是当我尝试编译代码时出现以下错误:
这适用于较小的数字,为什么它现在不起作用?
编辑:经过建议,我已经定义了A这样:
int *A = malloc(4000000000ULL);
我现在收到错误:Initializer元素不是常量。还应该注意,这是一个全局数组。
答案 0 :(得分:1)
假设int为32位,您尝试分配4GB空间。并且你不在堆上分配它。您需要致电malloc来执行此操作。如果在函数中声明了此变量,则会在堆栈上分配此空间。这太大了。
int
malloc
答案 1 :(得分:0)
您声明的数组是在堆栈上分配的,而不是堆。通过调用malloc来在堆上分配内存。
这会导致您在此处看到错误,因为堆栈的最大大小不仅受可用RAM数量的限制。根据{{3}},每个线程都有一个最大堆栈大小,这是可配置的(或者可以是MSDN docs)。
在实践中,在堆栈上声明这样的数组是不常见的。