Как убедить диспетчер памяти освободить неиспользуемую память

В недавнем посте ( Моя программа никогда не освобождает память обратно. Почему? ) я показываю, что при использовании FastMM, Недавно я создал искусственную тестовую программу, чтобы убедиться, что проблема не в памяти, а в том, что она появляется только с FastMM.

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

Требования к памяти («Частный рабочий набор»):

Без FastMM
Перед запуском цикла: 1,2 МБ
После выполнения цикла: 2,1 МБ

С FastMM (агрессивный режим отладки)
Перед запуском цикла: 2,1 МБ
После выполнения цикла: 25 МБ

С FastMM (режим выпуска)
Перед запуском цикла: 1,8 МБ
После выполнения цикла: 3 МБ

Если я запускаю цикл несколько раз, требования к памяти не увеличиваются. Это означает, что невыделенная память используется повторно, поэтому это не утечка памяти (утечка памяти увеличит объем памяти на несколько КБ / МБ при каждом запуске).


У меня следующие вопросы:

Как я могу отключить это поведение в FastMM? Это вообще возможно? Я знаю, что если я выпущу программу без FastMM или с FastMM Release Mode, она будет «тратить» умеренное количество оперативной памяти. Но отключение этого поведения по требованию поможет мне (нам?) Выявить утечки памяти. На самом деле в моем первом посте (см. Ссылку) многие люди предположили, что у меня утечка. Очевидно, путаница возникла именно из-за такого поведения. Нет, утечки очевидно нет. Это просто диспетчер памяти отказывается освобождать большие объемы памяти.

Он когда-нибудь освободит дополнительную память? Когда? Что это вызывает? Может ли это запустить программист? Например, если я знаю, что я выполнил задачу с интенсивным использованием ОЗУ, и пользователь может некоторое время не использовать программу (минимизировать ее), могу ли я сбросить ОЗУ обратно в систему? Что происходит, когда пользователь открывает несколько экземпляров моей программы? Разве они не будут конкурировать за оперативную память?

5
задан T.S 12 September 2017 в 14:22
поделиться