Выделить массив из 999999999 клеток |C ++ - PullRequest
0 голосов
/ 08 марта 2012

Если я скомпилировал это:

long double *N;

N = new long double[999999999];

Я получаю эту ошибку:

error C2148: total size of array must not exceed 0x7fffffff bytes

Итак, я попытался скомпилировать это:

long double *N;
long double *N2;

N = new long double[999999999];
N2 = N + 99999999;
N2 = new long double[900000000];

Я до сих пор не запустил программу, но я почти уверен, что получу ошибку heap corruption detected, потому что я не хочу перемещаться по N, а затем в определенной точке перемещаться по N2.

Есть ли надежный способ сделать это только с одним указателем?

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

999999999 * Размер (двойной) составляет 7999999992 байта.На 32-битной платформе это больше, чем 2 ^ 32 байта.Вы просто не можете обратиться к такому количеству байтов в 32-битном приложении.

Если вам абсолютно необходимо иметь 1 миллиард двойников, используйте 64-битную платформу.

1 голос
/ 08 марта 2012

Если вы работаете на 64-битной платформе и имеете достаточно ОЗУ для поддержки выделения памяти, компилятор не выдаст ошибку. Если любое из условий ложно, компилятор генерирует ошибку или исключение, и не существует «безопасного» способа выделить память за пределы Ram или более, чем тот, который поддерживается ОС и процессором.

...