Как вставить более 10 ^ 6 элементов в массив - PullRequest
1 голос
/ 26 сентября 2011

Я хочу оперировать 10 ^ 9 элементами.Для этого они должны храниться где-то, но в c, кажется, что массив может хранить только 10 ^ 6 элементов.Так есть ли способ работать с таким большим количеством элементов в c?

Выдается ошибка: error: size of array ‘arr’ is too large".

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Для этого они должны храниться где-то, но в C кажется, что массив занимает всего 10 ^ 6 элементов.

Совсем нет. Я думаю, что вы размещаете массив неправильно. Просто пишу

int myarray[big_number];

не будет работать, поскольку он попытается выделить память в стеке , который очень ограничен (часто размером в несколько МБ, поэтому 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;
}

Это выделит память (или, точнее, big_number * 4 байт на 32-разрядной машине) в heap . Примечание. Это также может привести к сбою, но в основном оно ограничено объемом свободной оперативной памяти, которая намного ближе или даже выше 10 ^ 9 (1 ГБ).

0 голосов
/ 26 сентября 2011

Массив использует непрерывное пространство памяти.Поэтому, если ваша память фрагментирована, вы не сможете использовать такой массив.Используйте другую структуру данных, например, связанный список.

О связанных списках:

С другой стороны, я попробовал на своем компьютере, и хотя я не могу создать int[1000000], malloc(1000000*sizeof(int)) работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...