Просмотр статистики памяти
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Только машинные коды |
||||
Pro, Premium и Ultimate |
Только машинные коды |
Функция CMemoryState::Difference просматривает два объекта-состояния памяти и определяет, какие объекты не были освобождены из кучи между начальным и конечным состоянием. После того как сделаны Практическое руководство. Получение снимков памяти и с помощью CMemoryState::Difference, произведено их сравнение, можно вызвать CMemoryState::DumpStatistics и получить сведения о неосвобожденных объектах.
Рассмотрим следующий пример.
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked!\n" );
diffMemState.DumpStatistics();
}
Образец дампа из примера выглядит следующим образом:
0 bytes in 0 Free Blocks
22 bytes in 1 Object Blocks
45 bytes in 4 Non-Object Blocks
Largest number used: 67 bytes
Total allocations: 67 bytes
Свободные блоки — это блоки, освобождение которых задерживается, если afxMemDF была установлена в delayFreeMemDF. Дополнительные сведения см. в разделе Практическое руководство. Включение и отключение диагностики памяти.
Обычные блоки объектов, показанные во второй строке, остаются выделенными в куче.
Блоки без объектов включают в себя массивы и структуры, созданные с помощью new. В этом случае четыре блока без объектов были созданы в куче, но не освобождены.
Largest number used показывает наибольшее количество памяти, используемой программой в любое время.
Total allocations показывает общее количество памяти, используемой программой.
См. также
Задачи
Практическое руководство. Получение снимков памяти