Confronto tra stati di memoria

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Standard

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Pro e Team

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Legenda tabella:

Argomento applicabile

Si applica

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

Un'altra tecnica per l'individuazione delle perdite di memoria comporta l'esecuzione di snapshot dello stato della memoria dell'applicazione in corrispondenza di punti chiave. La libreria CRT fornisce un tipo di struttura, _CrtMemState, che è possibile utilizzare per memorizzare uno snapshot dello stato della memoria:

_CrtMemState s1, s2, s3;

Per eseguire uno snapshot dello stato della memoria in corrispondenza di un determinato punto, passare una struttura _CrtMemState alla funzione _CrtMemCheckpoint. Questa funzione inserisce nella struttura uno snapshot dello stato corrente della memoria:

_CrtMemCheckpoint( &s1 );

È possibile effettuare il dump del contenuto di una struttura _CrtMemState in qualsiasi punto passando la struttura alla funzione _CrtMemDumpStatistics:

_CrtMemDumpStatistics( &s1 );

Questa funzione stampa un dump delle informazioni sull'allocazione di memoria del seguente tipo:

0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
3071 bytes in 16 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 3071 bytes.
Total allocations: 3764 bytes.

Per determinare se una perdita di memoria si sia verificata in una sezione di codice, è possibile eseguire snapshot dello stato della memoria prima e dopo tale sezione, quindi utilizzare _CrtMemDifference per confrontare i due stati:

_CrtMemCheckpoint( &s1 );
// memory allocations take place here
_CrtMemCheckpoint( &s2 );

if ( _CrtMemDifference( &s3, &s1, &s2) )
   _CrtMemDumpStatistics( &s3 );

Come il nome stesso indica, _CrtMemDifference confronta due stati della memoria (i parametri s1 e s2) e produce un risultato (il parametro s3), che rappresenta la differenza tra i due stati. L'inserimento di chiamate _CrtMemCheckpoint all'inizio e alla fine del programma e l'utilizzo di _CrtMemDifference per confrontare i risultati, rappresenta un altro metodo di controllo delle perdite di memoria. Se viene rilevata una perdita, sarà possibile utilizzare chiamate _CrtMemCheckpoint per dividere il programma e individuare la perdita mediante una tecnica di ricerca binaria.

Vedere anche

Concetti

Rilevamento e isolamento di perdite di memoria