Версии отладки функций выделения кучи
Библиотека среды выполнения C (CRT) содержит специальные версии отладочных функций выделения кучи. Эти функции имеют те же имена, что и версии выпуска, _dbg
добавленные к ним. В этой статье описываются различия между версией выпуска функции CRT и _dbg
версией, используя malloc
и _malloc_dbg
в качестве примеров.
Поведение в отладочных сборках
При _DEBUG
определении CRT сопоставляет все malloc
вызовы _malloc_dbg
. Таким образом, вам не нужно перезаписывать код, используя _malloc_dbg
вместо malloc
получения преимуществ при отладке.
Конечно, при желании можно и явно вызывать _malloc_dbg
. Явный вызов _malloc_dbg
имеет свои преимущества:
Отслеживание выделений типа
_CLIENT_BLOCK
.Запись имени исходного файла и номера строки, где был сделан запрос на выделение памяти.
Если вы не хотите преобразовывать malloc
вызовы _malloc_dbg
, вы можете получить сведения о исходном файле, определив _CRTDBG_MAP_ALLOC
, что приводит к тому, что препроцессор напрямую сопоставляет все вызовы malloc
вместо _malloc_dbg
того, чтобы полагаться на оболочку вокруг malloc
.
Чтобы отследить отдельные типы выделений памяти в клиентских блоках, нужно непосредственно вызвать функцию _malloc_dbg
и задать параметру blockType
значение _CLIENT_BLOCK
.
Поведение в сборках, отличных от отладки
Если _DEBUG
не определено, вызовы malloc
не нарушаются, вызовы _malloc_dbg
разрешаются malloc
в, определение _CRTDBG_MAP_ALLOC
игнорируется, а исходные сведения о файле, относящиеся к запросу на выделение, не предоставляются. Так как malloc
у него нет параметра типа блока, запросы на _CLIENT_BLOCK
типы рассматриваются как стандартные выделения.