Я запускаю следующий код в Borland Builder C ++ 6 и может видеть увеличение памяти, используемой программой в Memory (Private Working Set), диспетчере задач Windows, который, я считаю, является утечкой памяти.
for (int i = 0; i < 100000; i++)
{
try {
int n = 0;
int r = 1 / n; //division by zero
}
catch (EDivByZero& e) {}
}
Я попытался заменить менеджер памяти по умолчанию Builder C ++ на FASTMM4
но увидеть то же поведение. Это из-за утечка памяти или же фрагментация памяти потому что я запутался между двумя. Я полагаю, что в обоих случаях программа вынуждена переносить виртуальную память на диск, что увеличивает объем используемой памяти.
Глядя на виртуальную память — это хорошая идея, чтобы различать утечку и фрагментацию, но как я могу это сделать? Есть ли в Windows инструмент для проверки?
«Увеличение памяти, используемой программой в Memory (Private Working Set), диспетчере задач Windows, который, я считаю, является утечкой памяти». — это неверно
Когда вы освобождаете память в своей программе, она будет возвращена обратно в вашу программу, а не в O / S. Память будет освобождена в O / S только после выхода из вашей программы.
Обратите внимание — это только типичное поведение, C ++ ничего не говорит об этом, YMMV.
Других решений пока нет …