программа, над которой я сейчас работаю, обрабатывает большой объем данных (> 32 ГБ). Однако из-за «конвейерной обработки» в каждый момент времени в основной памяти присутствует максимум около 600 МБ (я проверил, это работает, как и планировалось).
Однако, если программа завершилась, и я, например, переключаюсь обратно в рабочее пространство с открытым Firefox (но также и с другими), потребуется некоторое время, прежде чем я смогу использовать его снова (также жесткий диск какое-то время очень активен). Этот факт заставляет меня задаться вопросом, меняет ли Linux (используемая мной операционная система) другие программы во время работы моей программы и почему?
На моем компьютере установлено 4 ГБ оперативной памяти, и пока моя программа активна, она никогда не превышает 2 ГБ.
Моя программа выделяет/освобождает динамическую память только двух разных размеров. Куски по 32 и 64 МБ. Он написан на C++, и я использую new и delete. Должен ли Linux быть недостаточно умным, чтобы повторно использовать эти блоки после того, как я их освободил, и оставить остальную память нетронутой?
Почему Linux выкидывает мои вещи из памяти? Это какой-то другой эффект, который я не учел? Могу ли я обойти эту проблему без написания собственной системы управления памятью?
new
иdelete
, чтобы пропустить реализацию диспетчера кучи вашего компилятора, именно диспетчер кучи вашего компилятора контролирует внутреннюю работу того, как ваше приложение взаимодействует с ОС w.r.t. управление памятью, а не напрямуюnew
иdelete
. - person PaulMcKenzie   schedule 17.03.2015new
иdelete
библиотеки времени выполнения C ++, а не компилятора. И, скорее всего, библиотека времени выполнения будет повторно использовать блоки — иначе вы увидите увеличение использования памяти! - person Mats Petersson   schedule 17.03.2015vmstat 1
, чтобы подтвердить свои догадки. Обратите внимание на столбцыsi
иso
, связанные с чтением/записью подкачки. - person myaut   schedule 17.03.2015