Свойства библиотеки DCRT
Главной причиной популярности DCRT-библиотеки в том, что она поддерживает мониторинг кучи (heap). В отладочных версиях можно проследить всю память, которая распределяется при помощи стандартных С/С++-функций, таких как new, maiioc и calloc. Монитор кучи проверяет как записи (underwrites), которые программа помещает в начало выделенного блока памяти, так и перезаписи (overwrites), размещаемые за концом блока. Этот механизм контролирует также и утечки памяти в приложении (и выдает соответствующие отчеты). Те, кто писал программы с использованием библиотеки MFC, вероятно, знакомы с отчетами об утечке памяти, генерируемыми при завершении приложения частью библиотеки DCRT, которую MFC автоматически включает в приложение.
Overwrite — обычно обозначает перезапись или наложение одной записи поверх другой. По определению автора (program writes past the end of block memory), в перезапись вкладывается несколько иной смысл: запись за концом блока памяти, что, по-видимому, означает выход записываемых данных за пределы выделенного им блока памяти. — Пер
Подсистема отчетов DCRT формирует трассу памяти (с помощью макросов __RPTn и RPTFn, а также поддержки утверждений). Поддержка таких утверждений библиотекой DCRT описана в главе 3, где рассмотрены также некоторые проблемы, связанные с их использованием. Напомним, что утверждения библиотеки DCRT — это довольно сильное средство, но они разрушают значение последней ошибки, что приводит к различному поведению отладочных и выпускных построений. Я настоятельно рекомендую пользоваться утверждениями программы SUPERASSERT, которая является частью BUGSLAYERUTIL.DLL.
Полезной особенностью DCRT-библиотеки является включение ее исходного кода в компилятор. В табл. 15.1 перечислены все файлы, входящие в состав DCRT-библиотеки. Если исходный код библиотеки CRT выполняется во время установки Microsoft Visual Studio (что я настоятельно рекомендую делать), то все исходные коды библиотек CRT и DCRT можно найти в каталоге ..\Microsoft Visual Studio\VC98\CRT\SRC.
Таблица 15.1. Исходные файлы DCRT-библиотеки.
Исходный файл |
Описание
|
DBGDEL.CPP |
Глобальная отладочная операция delete |
DBGHEAP.C |
Все функции обработки кучи |
DBGHOOK.C |
Функция подключения заглушки распределения памяти |
DBGINT.H |
Внутренние отладочные заголовки и функции |
DBGNEW.CPP |
Глобальная отладочная операция new |
DBGRPT.C |
Функции отладочных сообщений |
CRTDBG.H |
Файл заголовков, который нужно включать в приложение, пользующееся
DCRT-библиотекой. Этот файл находится в стандартном каталоге \lnclude |