다음을 통해 공유


메모리 상태 비교

업데이트: 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를 호출하여 프로그램을 분리하고 이진 검색 기술로 누수를 찾을 수 있습니다.

참고 항목

개념

메모리 누수 탐지 및 격리