Почему я не могу выделить больше памяти, чем доступно в оперативной памяти? - PullRequest
0 голосов
/ 23 октября 2019

Я пытался выполнить предложение malloc наподобие следующего:

TYPODATO *prof=(TYPODATO *)malloc((size_t)H*V*B2*sizeof(TYPODATO));

, где H*V*B2*sizeof(TYPODATO) равно 13037160840 B = 13,04 ГБ. Если я выполняю команду free -m в консоли, чтобы получить доступную память в МБ, я получаю 13486 МБ = 13,486 ГБ.

Однако предыдущий оператор malloc возвращает указатель NULL, указывающий, что такое количествопамять не может быть выделена. Запрашиваемый объем памяти не так велик, как доступный в системе, но даже если бы я смог его успешно выделить, система может использовать виртуальную память. Почему в этом случае система не использует виртуальную память?

1 Ответ

4 голосов
/ 23 октября 2019

malloc() не работает таким образом. malloc () выделяет один непрерывный блок памяти .
Вы пытаетесь выделить больше памяти, чем непрерывно доступно, следовательно, ошибка.

...