메모리 상태 비교
업데이트: 2007년 11월
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
네이티브 전용 |
|||
Standard |
네이티브 전용 |
|||
Pro 및 Team |
네이티브 전용 |
표의 범례:
해당 |
|
해당 없음 |
|
명령은 기본적으로 숨겨져 있습니다. |
주요 지점에서 응용 프로그램의 메모리 상태 스냅숏을 보고 메모리 누수를 찾을 수도 있습니다. 다음과 같이 CRT 라이브러리의 구조체 형식 _CrtMemState를 사용하여 메모리 상태 스냅숏을 저장할 수 있습니다.
_CrtMemState s1, s2, s3;
특정 지점의 메모리 상태 스냅숏을 보려면 _CrtMemState 구조체를 _CrtMemCheckpoint 함수로 전달하십시오. 이 함수는 다음과 같이 구조체를 현재 메모리 상태의 스냅숏으로 채웁니다.
_CrtMemCheckpoint( &s1 );
_CrtMemState 구조체를 다음과 같이 _CrtMemDumpStatistics 함수로 전달하여 어떤 지점에서든 구조체의 내용을 덤프할 수 있습니다.
_CrtMemDumpStatistics( &s1 );
이 함수는 다음과 같이 메모리 할당 정보 덤프를 출력합니다.
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.
코드 항목에서 메모리 누수가 발생했는지 확인하려면 해당 항목 전후의 메모리 상태 스냅숏을 보고 _CrtMemDifference를 사용하여 두 상태를 비교할 수 있습니다.
_CrtMemCheckpoint( &s1 );
// memory allocations take place here
_CrtMemCheckpoint( &s2 );
if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 );
이름에서도 알 수 있듯이 _CrtMemDifference는 두 개의 메모리 상태(s1 및 s2)를 비교하고 두 상태의 차이에 대한 결과(s3)를 산출합니다. 프로그램의 처음과 마지막에 _CrtMemCheckpoint 호출을 배치하고 _CrtMemDifference를 사용하여 결과를 비교해 보는 방법으로도 메모리 누수를 확인할 수 있습니다. 누수가 탐지되면 _CrtMemCheckpoint를 호출하여 프로그램을 분리하고 이진 검색 기술로 누수를 찾을 수 있습니다.