Утечки памяти и вялый пользовательский опыт - PullRequest
1 голос
/ 30 марта 2011

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

Возьмем, к примеру, следующий небольшой код C ++ с утечкой:

size_t size = 1024 * 1024 * 1024;
char* buf = new char[size];
std::fill_n(buf, size, 'o');
std::string pause;
std::getline(std::cin, pause);

Из моего понимания виртуальной памятидисковые кеши и т. д., я ожидаю, что, хотя приведенный выше код ожидает ввода пользователя в последней строке, его 1-гигабайтный буфер больше не используется, поэтому операционная система должна постепенно поменять его на диск и «забыть» о нем,Я (пользователь) некоторое время страдал бы от замедления, но через некоторое время все нормализовалось бы.

Это не то, что происходит в моей системе (Windows XP, 32-разрядная, с 2 ГБ ОЗУ).).Когда я запускаю приведенный выше код (дважды, в 2 отдельных cmd окнах, чтобы тратить всю доступную память), я чувствую сильное замедление работы моей системы;через несколько минут он становится лучше, но не приближается к максимальной производительности.Система возвращается в нормальное состояние после того, как я завершаю утечку «приложений».

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

  • До утечки: 14, 2, 2, 3, 2, ...
  • Послеутечка: 183, 40, 9, 7, 9, ...
  • После закрытия утечки "приложений": 12, 2, 2, ...

Замедлениеиз 3х, где я бы не ожидал ни одного.Как это можно объяснить?

1 Ответ

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

Файл подкачки Windows имеет конечный размер.Если вы заполняете большую часть этого буфера объемом 1 ГБ, то система должна работать усерднее, обмениваясь остальной памятью из того, что осталось мало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...