방법: 메모리 스냅샷 보기
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
네이티브 전용 |
||||
Pro, Premium 및 Ultimate |
네이티브 전용 |
참고
표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.
이 항목에서는 메모리 누수를 찾기 위해 메모리 스냅숏을 보는 방법에 대해 설명합니다.
메모리 누수를 탐지하려면
CMemoryState Members 개체를 만들고 CMemoryState::Checkpoint 멤버 함수를 호출합니다. 그러면 첫 번째 메모리 스냅숏이 만들어집니다.
프로그램이 메모리 할당 작업과 할당 취소 작업을 수행하면 다른 CMemoryState 개체를 만들고 해당 개체에 대해 Checkpoint를 호출합니다. 그러면 메모리 사용에 대한 두 번째 스냅숏이 만들어집니다.
세 번째 CMemoryState 개체를 만들고 이전의 두 CMemoryState 개체를 인수로 제공하여 CMemoryState::Difference 멤버 함수를 호출합니다. 두 메모리 상태가 서로 다르면 Difference 함수가 0이 아닌 값을 반환합니다. 이것은 할당이 취소되지 않은 메모리 블록이 있음을 나타냅니다.
다음 예제는 해당 코드의 내용을 보여 줍니다.
// 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
메모리를 검사하는 문은 프로그램의 Win32 Debug 버전에서만 컴파일되도록 #ifdef _DEBUG / #endif 블록에서 대괄호로 묶어야 합니다.
이제 메모리 누수가 확인되었으므로 다른 멤버 함수인 CMemoryState::DumpStatistics를 사용하여 메모리 통계 보기를 통해 해당 위치를 찾을 수 있습니다.