Procedura: creare snapshot 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.

Nota:

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida in linea a seconda delle impostazioni attive o dell'edizione del programma. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

In questo argomento verrà illustrato come effettuare snapshot della memoria per individuare perdite di memoria.

Per rilevare una perdita di memoria

  1. Creare un oggetto CMemoryState Members e chiamare la funzione membro CMemoryState::Checkpoint. Verrà creato il primo snapshot della memoria.

  2. Dopo che il programma ha eseguito le operazioni di allocazione e disallocazione di memoria, creare un altro oggetto CMemoryState e chiamare Checkpoint per tale oggetto. Verrà creato un secondo snapshot dell'utilizzo della memoria.

  3. Creare un terzo oggetto CMemoryState e chiamarne la funzione membro CMemoryState::Difference, fornendo come argomenti i due oggetti CMemoryState precedenti. Se esiste una differenza tra i due stati della memoria, la funzione Difference restituirà un valore diverso da zero, indicando così che alcuni blocchi di memoria non sono stati disallocati.

    Il codice sarà del tipo riportato in questo esempio:

    // Declare the variables needed
    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
        // Do your memory allocations and deallocations.
        CString s("This is a frame variable");
        // The next object is a heap object.
       CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    Si noti che le istruzioni relative al controllo della memoria sono racchiuse in blocchi #ifdef _DEBUG / #endif e vengono pertanto compilate solo nelle versioni di debug Win32 del programma.

    Determinata l'esistenza di una perdita di memoria, sarà possibile utilizzare un'altra funzione membro, CMemoryState::DumpStatistics, per la Visualizzazione della statistica della memoria che consentirà di individuare la perdita.

Vedere anche

Riferimenti

_DEBUG

Altre risorse

Rilevamento di perdite di memoria in MFC