开发者

How to insert more than 10^6 elements in a array

I want to operate on 10^9 elements. For this they should be stored somewhere but in c, it seems that an array can only store 10^6 elements. So is there any way to operate o开发者_如何转开发n such a large number of elements in c?

The error thrown is error: size of array ‘arr’ is too large".


For this they should be stored somewhere but in c it seems that an array only takes 10^6 elements.

Not at all. I think you're allocating the array in a wrong way. Just writing

int myarray[big_number];

won't work, as it will try to allocate memory on the stack, which is very limited (several MB in size, often, so 10^6 is a good rule of thumb). A better way is to dynamically allocate:

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;
}

This will allocate the memory (or, more precise, big_number * 4 bytes on a 32-bit machine) on the heap. Note: This might fail, too, but is mainly limited by the amount of free RAM which is much closer to or even above 10^9 (1 GB).


An array uses a contiguous memory space. Therefore, if your memory is fragmented, you won't be able to use such array. Use a different data structure, like a linked list.

About linked lists:

  • Wikipedia definition - http://en.wikipedia.org/wiki/Linked_list
  • Implementation in C - http://www.macs.hw.ac.uk/~rjp/Coursewww/Cwww/linklist.html

On a side note, I tried on my computer, and while I can't create an int[1000000], a malloc(1000000*sizeof(int)) works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜