Кажется возможным, что такое поведение может происходить из ситуации, в которой нет утечки.
Есть ли вероятность, что ваша куча становится фрагментированной ?
Скажем, вы делаете много выделений размером n
. Вы освобождаете их все, и ваша библиотека C вставляет эти буферы в свободный список. Затем какой-то другой путь кода делает выделения меньше n
, поэтому эти блоки в свободном списке разбиваются на более мелкие единицы. Затем следующая итерация цикла выполняет еще одну серию выделений размером n
, и свободный список больше не содержит непрерывной памяти такого размера, и malloc
должен запросить у ядра больше памяти. В конце концов, эти выделения «меньше, чем n
» освобождаются так же, как и ваши «n
-размерные», но если вы выполните достаточно итераций там, где существует фрагментация, я смогу увидеть процесс, постепенно увеличивающий объем памяти.
Один из способов избежать этого может состоять в том, чтобы выделить все ваши объекты один раз, а не продолжать выделять / освобождать их. Поскольку вы используете C ++, это может потребовать размещения нового или чего-то подобного. Поскольку вы используете Windows, я мог бы также упомянуть, что Win32 поддерживает с несколькими кучами в процессе, поэтому, если ваши объекты поступают из кучи, отличной от других выделений, вы можете избежать этого.