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

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

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

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

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

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

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

Ответы [ 2 ]

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

Существуют и другие проблемы с выделением памяти:

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

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

0 голосов
/ 30 марта 2012

Какая ОС?
Сколько всего у вас оперативной памяти + своп?

Пытаетесь ли вы выделить одну непрерывную область 8 Гб после того, как вы работали в течение некоторого времени? В общем плохая идея

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

...