Partilhar via


Como: Tirar instantâneos da memória

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Somente nativo

Padrão

Somente nativo

PRO e equipe

Somente nativo

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolha Import and Export Settings no menu Tools.Para obter mais informações, consulte Configurações do Visual Studio.

Este tópico mostra como tirar instantâneos de memória para ajudar a localizar um perda de memória.

Para detectar um perda de memória

  1. Criar um CMemoryState membros objeto e a telefonar a CMemoryState::Checkpoint função de membro. Isso cria o primeiro instantâneo de memória.

  2. Depois que o programa executa suas operações de alocação e desalocação de memória, criar outro CMemoryState objeto e a telefonar Checkpoint para esse objeto. Isso obtém um segundo instantâneo do Uso de Memória.

  3. Crie uma terceira CMemoryState objeto e chamar seu CMemoryState::Difference função de membro, fornecendo sistema autônomo argumentos, sistema autônomo duas anteriores CMemoryState objetos. Se houver uma diferença entre a memória dois afirma, o Difference função retorna um valor diferente de zero. Isso indica que alguns blocos de memória tem não sido desalocada.

    Este exemplo mostra a aparência do código:

    // 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
    

    Observe que as instruções de verificação de memória são bracketed por #ifdef _DEBUG / #endif bloqueia, de modo que eles são compilados apenas nas versões Win32 depurar de seu programa.

    Agora que você sabe que existe um perda de memória, você pode usar outra função de membro, CMemoryState::DumpStatistics, para Visualização da estatística de memória o que ajudará a localizá-lo.

Consulte também

Referência

_DEBUG

Outros recursos

Detecção de perda de memória no MFC