Versioni di debug di funzioni di allocazione heap
Le informazioni contenute in questo argomento sono valide per:
Edizione |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Solo nativo |
||||
Pro, Premium e Ultimate |
Solo nativo |
La libreria di runtime del linguaggio C contiene speciali versioni di debug delle funzioni di allocazione heap. Queste funzioni presentano lo stesso nome delle corrispondenti versioni di rilascio, con l'unica differenza del suffisso _dbg. Questo argomento illustra le differenze tra la versione di rilascio di una funzione CRT e la versione _dbg, utilizzando malloc e _malloc_dbg come esempi.
Quando viene definito _DEBUG, CRT associa tutte le chiamate a malloc a _malloc_dbg. Pertanto non è necessario riscrivere il codice utilizzando _malloc_dbg anziché malloc per sfruttarne 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 chiamate a malloc in chiamate a _malloc_dbg, è possibile ottenere le informazioni sul file di origine definendo _CRTDBG_MAP_ALLOC. In questo modo, il preprocessore associa direttamente tutte le chiamate a malloc alle chiamate a _malloc_dbg anziché basarsi su un wrapper di malloc.
Per registrare i tipi separati di allocazioni in blocchi client, è necessario chiamare _malloc_dbg direttamente e impostare il parametro blockType su _CLIENT_BLOCK.
Quando _DEBUG non viene definito, 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 non vengono fornite le informazioni sul file di origine relative alla richiesta di allocazione. Dal momento che malloc non presenta alcun parametro del tipo di blocco, le richieste di tipi _CLIENT_BLOCK vengono gestite come allocazioni standard.