Версии отладки функций выделения кучи
Обновлен: Ноябрь 2007
Этот раздел применим для следующих версий.
Выпуск |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Экспресс-выпуск |
Только машинные коды |
|||
Standard |
Только машинные коды |
|||
Pro и Team |
Только машинные коды |
Условные обозначения:
Применимо |
|
Неприменимо |
|
Команда или команды по умолчанию скрыты. |
Библиотека 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 обрабатываются как стандартные выделения.