Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Le informazioni contenute in questo argomento sono valide per:
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
|---|---|---|---|---|
Express |
![]() |
![]() |
Solo nativo |
![]() |
Standard |
![]() |
![]() |
Solo nativo |
![]() |
Pro e Team |
![]() |
![]() |
Solo nativo |
![]() |
Legenda tabella:
![]() |
Si applica |
![]() |
Non applicabile |
![]() |
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.
.gif)
.gif)
.gif)