Поделиться через


Функции создания отчетов о состоянии кучи

Этот раздел применим к:

Выпуск

Visual Basic

C#

F#

C++

Web Developer

Express

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Pro, Premium и Ultimate

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Есть несколько функций, отчитывающихся о содержимом отладочной кучи на текущий момент.

_CrtMemState

Чтобы сохранить снимок состояния кучи на текущий момент, используется структура _CrtMemState, определенная в CRTDBG.H:

typedef struct _CrtMemState
{
    // Pointer to the most recently allocated block:
    struct _CrtMemBlockHeader * pBlockHeader;
    // A counter for each of the 5 types of block:
    size_t lCounts[_MAX_BLOCKS];
    // Total bytes allocated in each block type:
    size_t lSizes[_MAX_BLOCKS];
    // The most bytes allocated at a time up to now:
    size_t lHighWaterCount;
    // The total bytes allocated at present:
    size_t lTotalCount;
} _CrtMemState;

Эта структура сохраняет указатель на первый (выделенный последним) блок в связанном списке отладочной кучи. Затем в двух массивах она записывает, сколько блоков памяти каждого типа (_NORMAL_BLOCK, _CLIENT_BLOCK, _FREE_BLOCK и т. д.) имеется в списке, а также количество байтов, выделенных в блоке каждого типа. И наконец она записывает наибольшее количество байтов, выделенных в куче до настоящего времени, а также количество байтов, выделенных в данный момент.

Другие функции отчетов CRT

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

Функция

Описание

_CrtMemCheckpoint

Сохраняет снимок кучи в структуре _CrtMemState приложения.

_CrtMemDifference

Сравнивает две структуры состояния памяти, сохраняет в третьей структуре различие между ними и возвращает значение TRUE при нахождении различий.

_CrtMemDumpStatistics

Формирует дамп структуры _CrtMemState. Структура может содержать снимок состояния отладочной кучи на данный момент или различие между двумя состояниями.

_CrtMemDumpAllObjectsSince

Выводит сведения обо всех объектах, выделенных с момента получения данного снимка кучи или с начала выполнения. Каждый раз при выводе блока _CLIENT_BLOCK вызывается функция-ловушка приложения, если она была установлена с помощью _CrtSetDumpClient.

_CrtDumpMemoryLeaks

Определяет, не произошла ли утечка памяти с начала выполнения программы, и, если произошла, выводит все выделенные объекты. Каждый раз при выводе блока _CLIENT_BLOCK при помощи _CrtDumpMemoryLeaks вызывается функция-ловушка приложения, если она была установлена с помощью _CrtSetDumpClient.

См. также

Другие ресурсы

Куча отладки CRT