힙 상태 보고 함수
업데이트: 2007년 11월
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
네이티브 전용 |
|||
Standard |
네이티브 전용 |
|||
Pro 및 Team |
네이티브 전용 |
표의 범례:
해당 |
|
해당 없음 |
|
명령은 기본적으로 숨겨져 있습니다. |
몇몇 함수는 지정한 순간에 디버그 힙의 내용을 보고합니다.
_CrtMemState
지정한 순간에 힙 상태의 요약 스냅숏을 캡처하려면 CRTDBG.H에 정의된 _CrtMemState 구조체를 사용하십시오.
typedef struct _CrtMemState
{
// Pointer to the most recently allocated block:
struct _CrtMemBlockHeader * pBlockHeader;
// A counter for each of the 5 types of block:
size_t lCounts[_MAX_BLOCKS];
// Total bytes allocated in each block type:
size_t lSizes[_MAX_BLOCKS];
// The most bytes allocated at a time up to now:
size_t lHighWaterCount;
// The total bytes allocated at present:
size_t lTotalCount;
} _CrtMemState;
이 구조체는 가장 최근에 할당된 첫 번째 블록에 대한 포인터를 디버그 힙의 연결 리스트에 저장합니다. 그런 다음 두 배열에서 목록에 있는 _NORMAL_BLOCK, _CLIENT_BLOCK, _FREE_BLOCK 등의 각 메모리 블록 형식의 개수와 각 블록 형식에 할당된 바이트 수를 기록합니다. 마지막으로 해당 포인트까지 전체적으로 힙에서 할당된 가장 큰 바이트 수와 현재 할당된 바이트 수를 기록합니다.
기타 CRT 보고 함수
다음 함수는 힙의 상태와 내용을 보고하며 그 정보를 사용하여 메모리 누수 등의 문제를 탐지합니다.
함수 |
설명 |
---|---|
힙의 스냅숏을 응용 프로그램의 _CrtMemState 구조체에 저장합니다. |
|
두 메모리 상태 구조체를 비교하고 세 번째 상태 구조체에 그 차이를 저장하며, 두 상태가 다른 경우 TRUE를 반환합니다. |
|
지정한 _CrtMemState 구조체를 덤프합니다. 구조체에는 지정한 순간의 디버그 힙 상태 스냅숏이나 두 스냅숏의 차이점이 포함될 수 있습니다. |
|
지정한 스냅숏이 힙의 스냅숏이거나 실행을 시작할 때 만들어진 스냅숏이기 때문에 할당된 모든 개체 정보를 덤프합니다. _CrtSetDumpClient를 사용하여 _CLIENT_BLOCK 블록을 설치한 경우, 이 블록을 덤프할 때마다 응용 프로그램의 후크 함수를 호출합니다. |
|
프로그램 실행을 시작한 이후로 메모리 누수가 발생했는지 확인하고, 메모리 누수를 탐지한 경우 할당된 개체를 모두 덤프합니다. _CrtSetDumpClient를 사용하여 _CLIENT_BLOCK 블록을 설치한 경우, _CrtDumpMemoryLeaks에서 이 블록을 덤프할 때마다 응용 프로그램의 후크 함수를 호출합니다. |