如何在数组中插入超过10 ^ 6个元素

时间:2011-09-26 11:45:58

标签: c

我想操作10 ^ 9个元素。为此他们应该存储在某个地方,但在c中,似乎一个数组只能存储10 ^ 6个元素。那么有没有办法在c?

中运行如此大量的元素?

引发的错误是error: size of array ‘arr’ is too large"

2 个答案:

答案 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))仍有效。