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_dbgmalloc in anziché basarsi su un wrapper intorno malloca .

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.

Vedi anche

Tecniche di debug CRT