Debugversionen von Heapreservierungsfunktionen
Die C-Runtime -Bibliothek (CRT) enthält spezielle Debugversionen der Heap-Zuordnungsfunktionen. Diese Funktionen haben die gleichen Namen wie die Releaseversionen, _dbg
die an sie angefügt wurden. In diesem Artikel werden die Unterschiede zwischen der Releaseversion einer CRT-Funktion und der _dbg
Version unter Verwendung malloc
und _malloc_dbg
als Beispiele beschrieben.
Verhalten in Debugbuilds
Wenn _DEBUG
sie definiert ist, ordnet das CRT alle malloc
Aufrufe zu _malloc_dbg
. Daher müssen Sie ihren Code _malloc_dbg
nicht neu schreiben, anstatt malloc
die Vorteile beim Debuggen zu erhalten.
Unter Umständen möchten Sie _malloc_dbg
jedoch explizit aufrufen. Der explizite Aufruf von _malloc_dbg
bietet zusätzliche Vorteile:
Nachverfolgen von
_CLIENT_BLOCK
-Reservierungen.Speichern von Quelldatei und Zeilennummer an der Stelle, an der die Reservierung angefordert wurde.
Wenn Sie Ihre malloc
Aufrufe _malloc_dbg
nicht konvertieren möchten, können Sie die Quelldateiinformationen abrufen, indem Sie definieren _CRTDBG_MAP_ALLOC
, was bewirkt, dass der Präprozessor alle Aufrufe malloc
_malloc_dbg
direkt zuzuordnen, anstatt sich auf einen Wrapper zu malloc
verlassen.
Um Reservierungstypen in Clientblöcken gesondert nachzuverfolgen, muss _malloc_dbg
direkt aufgerufen und der blockType
-Parameter auf _CLIENT_BLOCK
festgelegt werden.
Verhalten in Nicht-Debug-Builds
Wenn _DEBUG
sie nicht definiert ist, werden Aufrufe malloc
nicht gestört, aufrufe _malloc_dbg
werden aufgelöst malloc
, die Definition wird _CRTDBG_MAP_ALLOC
ignoriert, und Quelldateiinformationen, die sich auf die Zuordnungsanforderung beziehen, werden nicht bereitgestellt. Da malloc
kein Blocktypparameter vorhanden ist, werden Anforderungen für _CLIENT_BLOCK
Typen als Standardzuordnungen behandelt.