Como: Tirar instantâneos da memória
This topic applies to:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Native only |
||||
Pro, Premium e Ultimate |
Native only |
Observação |
---|
Caixas de diálogo e comandos de menu que você vê podem diferir das descritas na Help dependendo das suas configurações ativas ou edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. For more information, see Trabalhando com configurações. |
Este tópico mostra como tirar instantâneos da memória para ajudar a localizar um vazamento de memória.
Para detectar um vazamento de memória
Criar um CMemoryState Members objeto e a chamada a CMemoryState::Checkpoint função de membro. Isso cria o primeiro instantâneo da memória.
Após o programa executa suas operações de alocação e desalocação de memória, criar outro CMemoryState objeto e a chamada Checkpoint para o objeto. Isso obtém um segundo snapshot do uso da memória.
Criar um terceiro CMemoryState objeto e chamar seu CMemoryState::Difference função de membro, fornecendo como argumentos as duas anteriores CMemoryState objetos. Se houver uma diferença entre os estados de memória de dois a Difference função retorna um valor diferente de zero. Isso indica que alguns blocos de memória que não foram desalocados.
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 em versões de depuração do Win32 do seu programa.
Agora que você sabe que existe de um vazamento de memória, você pode usar a função de membro de outro, CMemoryState::DumpStatistics, em Visualização de estatística de memória que ajudarão você a localizar o proprietário.