Ladění verzí funkcí přidělení haldy
Knihovna C runtime (CRT) obsahuje speciální ladicí verze funkcí přidělení haldy. Tyto funkce mají stejné názvy jako verze vydané verze s připojenými verzemi _dbg
. Tento článek popisuje rozdíly mezi verzí funkce CRT a _dbg
verzí, a to pomocí malloc
a _malloc_dbg
jako příklady.
Chování při sestaveních ladění
Pokud _DEBUG
je definován, CRT mapuje všechna malloc
volání na _malloc_dbg
. Proto nemusíte kód přepisovat pomocí funkce, _malloc_dbg
abyste malloc
při ladění získali výhody.
Můžete ale chtít volat _malloc_dbg
explicitně. Volání _malloc_dbg
explicitně má některé další výhody:
Přidělování typů sledování
_CLIENT_BLOCK
Uložení zdrojového souboru a čísla řádku, kde došlo k žádosti o přidělení.
Pokud nechcete převést volání na _malloc_dbg
, můžete získat informace o zdrojovém souboru definováním _CRTDBG_MAP_ALLOC
, což způsobí, že preprocesor přímo mapuje všechna volánímalloc
, aby _malloc_dbg
se nemusela spoléhat na obálku kolem malloc
.malloc
Pokud chcete sledovat samostatné typy přidělení v blocích klienta, musíte volat _malloc_dbg
přímo a nastavit blockType
parametr na _CLIENT_BLOCK
.
Chování v sestaveních, která nejsou laděná
Pokud _DEBUG
není definována, volání, která malloc
nejsou narušena, volání _malloc_dbg
se přeloží malloc
na , definice _CRTDBG_MAP_ALLOC
je ignorována a informace o zdrojovém souboru týkající se žádosti o přidělení nejsou k dispozici. Vzhledem k tomu malloc
, že parametr typu bloku nemá, požadavky na _CLIENT_BLOCK
typy se považují za standardní přidělení.