Первое, что нужно:
Диспетчер задач! = Профилировщик памяти
Операционная система (или, точнее, система времени выполнения C), безусловно, кеширует часть памяти, которую выallocate.
Обратите внимание, что операционная система обычно не тупа - если это память, которая не используется приложением, и ОС требуется больше памяти для удовлетворения потребностей памяти некоторых других программ, она будет выделяться соответствующим образом.Но если это не так (это происходит не всегда), оставьте приложение для повторного использования, когда это выигрышная стратегия.
Из-за такого рода оптимизаций вы действительно не сможете использоватьДиспетчер задач, чтобы получить точное представление об использовании памяти приложением.
Второе:
Как и все не глупые классы динамических массивов, CArray
не освобождаетпамять, поддерживающая массив, даже когда вы удаляете все элементы на случай, если вам понадобится снова использовать буфер памяти.Было бы ужасной тратой процессорных циклов удалить базовый буфер памяти только для того, чтобы обнаружить, что вам нужно потратить еще больше процессорных циклов для перераспределения другого буфера для обработки вашего следующего вызова CArray::Append()
, который может прийти сразу после CArray::RemoveAll()
.
Если вы действительно хотите избавиться от этого дополнительного пространства, используйте CArray :: FreeExtra () .Обратите внимание, что функция может включать выделение нового буфера и копирование элементов в новый, а затем удаление старого буфера.