1

У меня есть программа, которая требует много памяти. Настолько, что malloc дает сбой, так как системе не хватает памяти.

Мне все равно, если накладные расходы по обмену страниц на диске слишком велики - я просто хочу, чтобы программа работала. Итак, возможно ли, что путем достаточного увеличения размера раздела подкачки можно предотвратить ошибку нехватки памяти, эффективно увеличив объем доступной памяти?

3 ответа3

3

Функция malloc() обычно выделяет виртуальную память из кучи памяти. Даже если вы не указали ни операционную систему, ни язык программирования, ни версию библиотеки времени выполнения, я собираюсь предположить, что ваша версия malloc() не выделяет физическую память. Поэтому добавление дополнительной физической памяти или увеличение пространства подкачки не может устранить ошибку из-за нехватки памяти, которую вы видите в malloc().

Для решения вам необходимо определить, превышает ли ваша программа объем (виртуальной) памяти, который выделен, или в системе фактически не хватает страниц памяти. "Когда Linux не хватает памяти" (или эта копия) объясняет, как malloc () распределяет (виртуальную) память, два способа, которыми вы можете получить состояние нехватки памяти, и как определить, какой. Обратите внимание, что доступность страниц памяти представляет собой сложную комбинацию размера физической памяти, размера пространства подкачки, использования памяти и загрузки процесса.

1

Ну нет. Это не увеличивает вашу память - это просто означает, что ваша ОС способна перемещать вещи, которые не используются немедленно, чтобы освободить память. Это не будет иметь никакого значения с точки зрения производительности, но если рассматриваемое программное обеспечение не использует память активно, ваша система может заменить оперативную память на вашу подкачку, чтобы использовать ее для других целей.

Возможно, вы захотите попробовать создать и использовать файл подкачки, а не раздел подкачки, чтобы посмотреть, работает ли добавление подкачки.

Вы также можете попытаться ограничить (хотя это может иметь последствия) объем памяти, который программа использует с ulimit.

Загрузка подкачки не является заменой физической памяти - вам нужно либо добавить больше памяти, либо решить, почему вашей программе требуется столько памяти, и исправить ее.

0

Физическая память - это микросхемы памяти внутри корпуса вашего компьютера. Файл подкачки используется, когда вам не хватает физической памяти. Увеличение размера файла подкачки поможет предотвратить ошибки нехватки памяти, но я не рекомендую это делать. Наличие слишком большого количества доступного файла подкачки придаст вашему компьютеру необоснованное чувство способности и, вероятно, приведет к замедлению его сканирования при использовании большей части файла подкачки.

Лучшее решение - купить больше чипов памяти. Это заставит все работать немного лучше.

Если вы не возражаете, я спрашиваю, что ваше приложение делает так много памяти?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .