我想操作10 ^ 9个元素。为此他们应该存储在某个地方,但在c中,似乎一个数组只能存储10 ^ 6个元素。那么有没有办法在c?
中运行如此大量的元素?引发的错误是error: size of array ‘arr’ is too large"
。
答案 0 :(得分:2)
为此他们应该存储在某个地方,但在c中它似乎是一个 数组只需要10 ^ 6个元素。
完全没有。我认为你是以错误的方式分配数组。只是写
int myarray[big_number];
将无法正常工作,因为它将尝试在stack上分配内存,这是非常有限的(通常是几MB的大小,所以10 ^ 6是一个很好的经验法则)。更好的方法是动态分配:
int* myarray;
int main() {
// Allocate the memory
myarray = malloc(big_number * sizeof(int));
if (!myarray) {
printf("Not enough space\n");
return -1;
}
// ...
// Free the allocated memory
free(myarray);
return 0;
}
这将在heap上分配内存(或更准确地说,在32位计算机上big_number * 4
个字节)。注意:这也可能失败,但主要受限于更接近甚至高于10 ^ 9(1 GB)的可用RAM量。
答案 1 :(得分:-1)
数组使用连续的内存空间。因此,如果您的内存碎片化,您将无法使用此类阵列。使用不同的数据结构,如链表。
关于链接列表:
另一方面,我在计算机上试了一下,虽然我无法创建int[1000000]
,但malloc(1000000*sizeof(int))
仍有效。