Недостаточно памяти - почему система не выгружает страницы, которые не использовались недавно?

У меня есть программа, которая выполняет очень интенсивную работу с графикой и требует много памяти (> 8 ГБ), однако моя машина в настоящее время имеет только 8 ГБ ОЗУ, что означает, что программа выбрасывает неправильный выделенный память, когда ей не хватает памяти.

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

Теперь я задался вопросом, почему система выдает bad_alloc, когда она достигает> 8 ГБ использования памяти, вместо того, чтобы отказываться от страниц и выгружать некоторые страницы? Разве это не одна из проблем, которые должны решить подкачка и виртуальная память?

Я смогу запустить свою программу, для которой требуется> 8 ГБ памяти, если бы она просто выгружала страницы, к которым недавно не обращались, чтобы иметь возможность создавать новые страницы для требуемой памяти.

Кто-нибудь может дать объяснение?

На моей машине есть файл подкачки размером 8 ГБ.


person Tony The Lion    schedule 30.03.2012    source источник
comment
Какая ОС? Какие переопределения настроек?   -  person Mat    schedule 30.03.2012
comment
У меня 64-битная Win7 Home Premium, где мне найти настройки переопределения?   -  person Tony The Lion    schedule 30.03.2012
comment
Это пользовательская программа, а не то, что написано на плакате - предложить перейти к суперпользователю?   -  person Martin Beckett    schedule 30.03.2012
comment
@MartinBeckett, с точки зрения программистов это тоже интересный вопрос.   -  person Tony The Lion    schedule 30.03.2012
comment
@TonyTheLion - да, но если вы не можете контролировать выделение, вы не сможете это исправить. Могут быть пользовательские настройки, которые вы можете изменить - и суперпользователь - лучшее место, чтобы спросить их.   -  person Martin Beckett    schedule 30.03.2012
comment
@MartinBeckett, я хотел понять только с точки зрения программиста, не более того. Эта программа, которую я запускал, просто побудила меня задать этот вопрос, так как это был хороший пример.   -  person Tony The Lion    schedule 30.03.2012


Ответы (2)


Есть и другие проблемы с распределением памяти:

  1. Распределение памяти процесса: процессы должны запрашивать кадр памяти у ОС. Возможно, вы достигли максимального размера, который может дать вам ОС.
  2. Пространство виртуальной памяти: внутри вашего процесса и программы вы работаете в пространстве виртуальной памяти. Опять же, процесс и / или запущенная программа может не иметь возможности выйти за пределы 32-разрядной версии.

Могут быть и другие подобные проблемы, которых я не перечислил

person ControlAltDel    schedule 30.03.2012

Какая ОС?
Сколько всего RAM + swap у вас?

Вы пытаетесь выделить один непрерывный регион 8 ГБ после некоторого времени работы? Вообще плохая идея

см. Как решить проблему фрагментации памяти

person Martin Beckett    schedule 30.03.2012
comment
У меня 8 ГБ физической памяти и файл подкачки 8 ГБ - person Tony The Lion; 30.03.2012
comment
Я не совсем уверен, что программа пытается выделить, это программа, выполняющая редактирование изображений с очень высоким разрешением, поэтому, если она загружает их в память, это будет то, что требует памяти - person Tony The Lion; 30.03.2012
comment
@TonyTheLion - мы предполагали, что вы пишете программное обеспечение (это ТАК), пытаясь выделить 8 ГБ в одном блоке, имея только 16 ГБ, не сработает. Попробуйте увеличить размер файла подкачки - много - person Martin Beckett; 30.03.2012