Versioni di debug di funzioni di allocazione heap
La libreria C Runtime (CRT) contiene versioni di debug speciali delle funzioni di allocazione dell'heap. Queste funzioni hanno gli stessi nomi delle versioni release con _dbg
accodamento. Questo articolo descrive le differenze tra la versione Release di una funzione CRT e la _dbg
versione, usando malloc
e _malloc_dbg
come esempi.
Comportamento nelle compilazioni di debug
Quando _DEBUG
viene definito, CRT esegue il mapping di tutte le malloc
chiamate a _malloc_dbg
. Pertanto, non è necessario riscrivere il codice usando _malloc_dbg
invece di malloc
ricevere i vantaggi durante il debug.
È tuttavia possibile chiamare _malloc_dbg
esplicitamente. La chiamata esplicita di _malloc_dbg
presenta alcuni vantaggi supplementari:
Registrazione delle allocazioni del tipo
_CLIENT_BLOCK
.Memorizzazione del file sorgente e del numero di riga nel punto in cui ha avuto luogo la richiesta di allocazione.
Se non si desidera convertire le malloc
chiamate in _malloc_dbg
, è possibile ottenere le informazioni sul file di origine definendo _CRTDBG_MAP_ALLOC
, che fa in modo che il preprocessore eselabori direttamente tutte le chiamate a _malloc_dbg
malloc
in anziché basarsi su un wrapper intorno malloc
a .
Per registrare i tipi separati di allocazioni in blocchi client, è necessario chiamare _malloc_dbg
direttamente e impostare il parametro blockType
su _CLIENT_BLOCK
.
Comportamento nelle compilazioni non di debug
Quando _DEBUG
non viene definita, le chiamate a malloc
non vengono disturbate, le chiamate a _malloc_dbg
vengono risolte in malloc
, la definizione di _CRTDBG_MAP_ALLOC
viene ignorata e le informazioni sul file di origine relative alla richiesta di allocazione non vengono fornite. Poiché malloc
non ha un parametro di tipo di blocco, le richieste per _CLIENT_BLOCK
i tipi vengono considerate come allocazioni standard.