Версии отладки функций выделения кучи
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Только машинные коды |
||||
Pro, Premium и Ultimate |
Только машинные коды |
Библиотека 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 обрабатываются как стандартные выделения.