다음을 통해 공유


!힙

!heap 확장은 힙 사용 정보를 표시하거나, 힙 관리자에서 중단점을 제어하거나, 유출된 힙 블록을 검색하거나, 힙 블록을 검색하거나, 페이지 힙 정보를 표시합니다.

이 확장은 세그먼트 힙 및 NT 힙을 지원합니다. 매개 변수 없이 !heap을 사용하여 모든 힙과 해당 형식을 나열합니다.

!heap [HeapOptions] [ValidationOptions] [Heap] 
!heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress] 
!heap -B {alloc|realloc|free} [Heap | BreakAddress] 
!heap -l 
!heap -s [SummaryOptions] [StatHeapAddress] 
!heap -i HeapAddress
!heap -x [-v] Address 
!heap -p [PageHeapOptions] 
!heap -srch [Size] Pattern
!heap -flt FilterOptions
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
!heap [-p] -?
!heap -triage [Handle | Address] 

세그먼트 및 NT 힙 매개 변수

이러한 매개 변수는 세그먼트 및 NT 힙에서 작동합니다.

-s
요약 정보가 요청되도록 지정합니다. SummaryOptionsStatHeapAddress를 생략하면 현재 프로세스와 연결된 모든 힙에 대한 요약 정보가 표시됩니다.

SummaryOptions
다음 옵션의 조합일 수 있습니다. SummaryOptions는 대/소문자를 구분하지 않습니다. !heap -s -? 추가 정보를 참조하세요.

옵션 효과

-v

모든 데이터 블록을 확인합니다.

-b BucketSize

버킷 크기를 지정합니다. 기본값은 1024비트입니다.

-d DumpBlockSize

버킷 크기를 지정합니다.

-a

모든 힙 블록을 덤프합니다.

-c

각 블록의 내용이 표시되도록 지정합니다.

-triage [Handle | Address]
디버거가 프로세스의 힙에서 오류를 자동으로 검색하도록 합니다. 힙 핸들을 인수로 지정하면 해당 힙이 검사됩니다. 그렇지 않으면 모든 힙이 지정된 주소를 포함하는 힙을 검색하고, 힙이 발견되면 검사됩니다. -triage를 사용하는 것은 LFH(하위 조각화 힙) 손상의 유효성을 검사하는 유일한 방법입니다.

-x [-v]
디버거가 지정된 주소를 포함하는 힙 블록을 검색하도록 합니다. -v가 추가되면 명령은 현재 프로세스의 전체 가상 메모리 공간에서 이 힙 블록에 대한 포인터를 검색합니다.

-l
디버거가 유출된 힙 블록을 검색하도록 합니다.

-나는 Address -h HeapAddress
지정된 힙에 대한 정보를 표시합니다.

주소
검색할 주소를 지정합니다.

-?
디버거 명령 창에 이 확장에 대한 몇 가지 간단한 도움말 텍스트를 표시합니다. 일반 도움말에는 !heap -?을 사용하고 페이지 힙 도움말에는 !heap -p-?를 사용합니다.

NT 힙 매개 변수

이러한 매개 변수는 NT 힙에서만 작동합니다.

HeapOptions
다음 옵션의 조합일 수 있습니다. HeapOptions 값은 대/소문자를 구분합니다.

옵션 효과

-v

디버거가 지정된 힙의 유효성을 검사하도록 합니다.

참고 : 이 옵션은 LFH(낮은 조각화 힙) 손상을 검색하지 않습니다. 대신 -triage를 사용합니다.

-a

지정된 힙에 대한 모든 정보가 표시되도록 합니다. 이 경우 크기는 힙 세분성으로 반올림됩니다. (-a 옵션을 사용하여 !heap 을 실행하는 것은 시간이 오래 걸릴 수 있는 세 가지 옵션 -h -f -m을 사용하여 실행하는 것과 같습니다.)

-h

지정된 힙에 대한 모든 비 LFH 항목을 표시합니다.

-hl

LFH 항목을 포함하여 지정된 힙에 대한 모든 항목이 디스플레이에 포함되도록 합니다.

-f

지정된 힙에 대한 모든 사용 가능한 목록 항목이 표시되도록 합니다.

-m

지정된 힙에 대한 모든 세그먼트 항목을 표시합니다.

-t

지정된 힙에 대한 태그 정보를 표시합니다.

-T

지정된 힙에 대한 의사 태그 항목을 표시합니다.

-g

표시에 전역 태그 정보가 포함되도록 합니다. 전역 태그는 태그가 지정되지 않은 각 할당과 연결됩니다.

-s

지정된 힙에 대한 요약 정보가 표시되도록 합니다.

-k

(x86 기반 대상만 해당) 표시에 각 항목과 연결된 스택 역 추적이 포함되도록 합니다.

ValidationOptions
다음 옵션 중 하나일 수 있습니다. ValidationOptions는 대/소문자를 구분합니다.

옵션 효과

-D

지정된 힙에 대한 호출 유효성 검사를 사용하지 않도록 설정합니다.

-E

지정된 힙에 대한 호출 유효성 검사를 사용하도록 설정합니다.

-d

지정된 힙에 대한 힙 검사를 사용하지 않도록 설정합니다.

-e

지정된 힙에 대한 힙 검사를 사용하도록 설정합니다.

-나는 주소 또는 HeapAddress
지정된 힙에 대한 정보를 표시합니다.

BreakAddress
중단점을 설정하거나 제거할 블록의 주소를 지정합니다.

-b
디버거가 힙 관리자에서 조건부 중단점을 만들도록 합니다. -b 옵션 뒤에 할당, 재할당 또는 해제가 있을 수 있습니다. 이 옵션은 메모리 할당, 재할당 또는 해제를 통해 중단점을 활성화할지 여부를 지정합니다. BreakAddress를 사용하여 블록의 주소를 지정하는 경우 중단점 유형을 생략할 수 있습니다. 힙을 사용하여 힙 주소 또는 힙 인덱스 지정하는 경우 형식과 Tag 매개 변수를 포함해야 합니다.

태그
힙 내의 태그 이름을 지정합니다.

-B
디버거가 힙 관리자에서 조건부 중단점을 제거하도록 합니다. 중단점 유형(할당, 재할 또는 자유)을 지정해야 하며 -b 옵션에 사용된 것과 동일해야 합니다.

StatHeapAddress
힙의 주소를 지정합니다. 0이거나 생략된 경우 현재 프로세스와 연결된 모든 힙이 표시됩니다.

-p
페이지 힙 정보가 요청되도록 지정합니다. PageHeapOptions 없이 이 힙을 사용하면 모든 페이지 힙이 표시됩니다.

PageHeapOptions
다음 옵션 중 하나일 수 있습니다. PageHeapOptions는 대/소문자를 구분합니다. 옵션을 지정하지 않으면 가능한 모든 페이지 힙 핸들이 표시됩니다.

옵션 효과

-h 핸들

핸들 핸들이 있는 페이지 힙에 대한 자세한 정보가 디버거에 표시되도록 합니다.

-a 주소

디버거가 블록에 주소가 포함된 페이지 힙을 찾도록 합니다. 이 주소가 전체 페이지 힙 블록과 어떻게 관련되어 있는지, 이 주소가 페이지 힙의 일부인지, 블록 내의 오프셋인지, 블록이 할당되었는지 또는 해제되었는지와 같은 전체 세부 정보가 포함됩니다. 스택 추적은 사용할 수 있을 때마다 포함됩니다. 이 옵션을 사용하면 크기가 힙 할당 세분성의 배수로 표시됩니다.

-t[c|s] [추적]

디버거가 무거운 힙 사용자의 수집된 추적을 표시하도록 합니다. 추적은 표시할 추적 수를 지정합니다. 기본값은 4입니다. 지정된 수보다 더 많은 추적이 있는 경우 가장 빠른 추적이 표시됩니다. -t 또는 -tc를 사용하는 경우 추적은 개수 사용량별로 정렬됩니다. -ts를 사용하는 경우 추적은 크기별로 정렬됩니다. (-tc-ts 옵션은 Windows XP에서만 지원됩니다. -t 옵션은 Windows XP 및 이전 버전의 Windows에서만 지원됩니다.)

-fi [추적]

디버거가 가장 최근의 오류 주입 추적을 표시하도록 합니다. 추적은 표시할 수량을 지정합니다. 기본값은 4입니다.

-모두

디버거가 모든 페이지 힙에 대한 자세한 정보를 표시하도록 합니다.

-?

디버거가 힙 블록 다이어그램을 포함하여 페이지 힙 도움말을 표시하도록 합니다. (이러한 다이어그램은 다음 설명 섹션에서도 볼 수 있습니다.)

!heap -p 확장 명령을 사용하려면 먼저 대상 프로세스에 대해 페이지 힙을 사용하도록 설정해야 합니다. 다음 설명 섹션의 세부 정보를 참조하세요.

-srch
지정된 패턴에 대한 모든 힙을 검색합니다.

무늬
찾을 패턴을 지정합니다.

크기
다음 옵션 중 하나일 수 있습니다. 패턴의 크기를 지정합니다. '-'가 필요합니다.

옵션 효과

-b

패턴은 하나의 BYTE 크기입니다.

-w

패턴은 하나의 WORD 크기입니다.

-d

패턴은 하나의 DWORD 크기입니다.

-q

패턴은 크기가 하나의 QWORD입니다.

위의 내용이 지정되지 않은 경우 패턴은 컴퓨터 포인터와 같은 크기로 간주됩니다.

-flt
지정된 크기 또는 크기 범위의 힙 할당만 포함하도록 디스플레이를 제한합니다.

FilterOptions
다음 옵션 중 하나일 수 있습니다. FilterOptions는 대/소문자를 구분합니다.

옵션 효과

s 크기

단일 크기의 힙만 포함하도록 디스플레이를 제한합니다.

r SizeMin SizeMax

지정된 크기 범위 내의 힙만 포함하도록 디스플레이를 제한합니다.

참고 항목

이후 버전의 !heap 옵션에서는 -flt 더 이상 존재하지 않을 수 있습니다. 명령줄 도움말을 사용하여 사용 가능한 옵션을 확인합니다.

-합계
지정된 힙에 대한 사용 통계를 표시합니다.

-h 핸들
핸들의 힙 에 대한 사용 통계만 표시되도록 합니다 . 핸들이 0이거나 생략되면 모든 힙에 대한 사용 통계가 표시됩니다.

-grp GroupBy
GroupBy에서 지정 한 대로 표시를 다시 정렬합니다. GroupBy에 대한 옵션은 다음 표에서 찾을 수 있습니다.

옵션 효과

A

할당 크기에 따라 사용 통계를 표시합니다.

B

블록 수에 따라 사용 통계를 표시합니다.

S

각 할당의 총 크기에 따라 사용 통계를 표시합니다.

MaxDisplay
출력을 MaxDisplay 줄 수로만 제한합니다.

DLL

Windows XP 이상

Ext.dll Exts.dll

추가 정보

힙에 대한 자세한 내용은 다음 리소스를 참조하세요.

책: 마크 루시노비치와 데이비드 솔로몬에 의해 마이크로 소프트 Windows 내부 .

예제 11: 페이지 힙 확인 사용

예제 12: 페이지 힙 확인을 사용하여 버그 찾기

힙 메모리 프로세스 로거 사용에 대한 자세한 내용은 예제 11: 프라이빗 추적 세션 시작

설명

이 확장 명령은 다양한 작업을 수행하는 데 사용할 수 있습니다.

표준 !heap 명령은 현재 프로세스에 대한 힙 정보를 표시하는 데 사용됩니다. (사용자 모드 프로세스에만 사용해야 합니다. 시스템 프로세스에 !pool 확장 명령을 사용해야 합니다.)

!heap -b!heap -B 명령은 힙 관리자에서 조건부 중단점을 만들고 삭제하는 데 사용됩니다.

!heap -l 명령은 유출된 힙 블록을 검색합니다. 가비지 수집기 알고리즘을 사용하여 프로세스 주소 공간의 어느 곳에서도 참조되지 않는 힙에서 사용 중인 모든 블록을 검색합니다. 대규모 애플리케이션의 경우 완료하는 데 몇 분 정도 걸릴 수 있습니다. 이 명령은 Windows XP 이상 버전의 Windows에서만 사용할 수 있습니다.

!heap -x 명령은 지정된 주소를 포함하는 힙 블록을 검색합니다. -v 옵션을 사용하는 경우 이 명령은 현재 프로세스의 전체 가상 메모리 공간에서 이 힙 블록에 대한 포인터를 추가로 검색합니다. 이 명령은 Windows XP 이상 버전의 Windows에서만 사용할 수 있습니다.

!heap -p 명령은 다양한 형태의 페이지 힙 정보를 표시합니다. !heap -p를 사용하기 전에 대상 프로세스에 대해 페이지 힙을 사용하도록 설정해야 합니다. 이 작업은 gflags.exe(Global Flags) 유틸리티를 통해 수행됩니다. 이렇게 하려면 유틸리티를 시작하고, 이미지 파일 이름 텍스트 상자에 대상 애플리케이션의 이름을 입력하고, 이미지 파일 옵션페이지 힙을 사용하도록 설정하고, 적용을 선택합니다. 또는 gflags /i xxx.exe +hpa를 입력하여 명령 프롬프트 창에서 Global Flags 유틸리티를 시작할 수 있습니다. 여기서 xxx.exe 대상 애플리케이션의 이름입니다.

!heap -p -t[c|s] 명령은 Windows XP 외에는 지원되지 않습니다. 디버거 패키지와 함께 제공되는 UMDH 도구를 사용하여 비슷한 결과를 얻을 수 있습니다.

!heap -srch 명령은 지정된 특정 패턴을 포함하는 힙 항목을 표시합니다.

!heap -flt 명령은 지정된 크기의 힙 할당으로만 표시를 제한합니다.

!heap -stat 명령은 힙 사용 통계를 표시합니다.

다음은 표준 !heap 명령의 예입니다.

0:000> !ntsdexts.heap -a
Index   Address  Name      Debugging options enabled
  1:   00250000 
    Segment at 00250000 to 00350000 (00056000 bytes committed)
    Flags:               50000062
    ForceFlags:          40000060
    Granularity:         8 bytes
    Segment Reserve:     00100000
    Segment Commit:      00004000
    DeCommit Block Thres:00000400
    DeCommit Total Thres:00002000
    Total Free Size:     000003be
    Max. Allocation Size:7ffddfff
    Lock Variable at:    00250b54
    Next TagIndex:       0012
    Maximum TagIndex:    07ff
    Tag Entries:         00350000
    PsuedoTag Entries:   00250548
    Virtual Alloc List:  00250050
    UCR FreeList:        002504d8
    128-bit bitmap of free lists
    FreeList Usage:      00000014 00000000 00000000 00000000
              Free    Free
              List    List
#       Head      Blink      Flink
    FreeList[ 00 ] at 002500b8: 002a4378 . 002a4378
                                0x02 - HEAP_ENTRY_EXTRA_PRESENT
                                0x04 - HEAP_ENTRY_FILL_PATTERN
        Entry     Prev    Cur   0x10 - HEAP_ENTRY_LAST_ENTRY

Address   Size    Size  flags
002a4370: 00098 . 01c90 [14] - free
    FreeList[ 02 ] at 002500c8: 0025cb30 . 002527b8
002527b0: 00058 . 00010 [04] - free
0025cb28: 00088 . 00010 [04] - free
    FreeList[ 04 ] at 002500d8: 00269a08 . 0026e530
0026e528: 00038 . 00020 [04] - free
0026a4d0: 00038 . 00020 [06] - free
0026f9b8: 00038 . 00020 [04] - free
0025cda0: 00030 . 00020 [06] - free
00272660: 00038 . 00020 [04] - free
0026ab60: 00038 . 00020 [06] - free
00269f20: 00038 . 00020 [06] - free
00299818: 00038 . 00020 [04] - free
0026c028: 00038 . 00020 [06] - free
00269a00: 00038 . 00020 [46] - free
 
    Segment00 at 00250b90:
Flags:           00000000
Base:            00250000
First Entry:     00250bc8
Last Entry:      00350000
Total Pages:     00000080
Total UnCommit:  00000055
Largest UnCommit:000aa000
UnCommitted Ranges: (1)
    002a6000: 000aa000

    Heap entries for Segment00 in Heap 250000
                        0x01 - HEAP_ENTRY_BUSY            
                        0x02 - HEAP_ENTRY_EXTRA_PRESENT   
                        0x04 - HEAP_ENTRY_FILL_PATTERN    
                        0x08 - HEAP_ENTRY_VIRTUAL_ALLOC   
                        0x10 - HEAP_ENTRY_LAST_ENTRY      
                        0x20 - HEAP_ENTRY_SETTABLE_FLAG1  
                        0x40 - HEAP_ENTRY_SETTABLE_FLAG2  
Entry     Prev    Cur   0x80 - HEAP_ENTRY_SETTABLE_FLAG3  

Address   Size    Size  flags       (Bytes used)    (Tag name)
00250000: 00000 . 00b90 [01] - busy (b90)
00250b90: 00b90 . 00038 [01] - busy (38) 
00250bc8: 00038 . 00040 [07] - busy (24), tail fill (NTDLL!LDR Database)
00250c08: 00040 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00250c68: 00060 . 00028 [07] - busy (10), tail fill (NTDLL!LDR Database)
00250c90: 00028 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00250cf0: 00060 . 00050 [07] - busy (38), tail fill (Objects=  80)
00250d40: 00050 . 00048 [07] - busy (2e), tail fill (NTDLL!LDR Database)
00250d88: 00048 . 00c10 [07] - busy (bf4), tail fill (Objects>1024)
00251998: 00c10 . 00030 [07] - busy (12), tail fill (NTDLL!LDR Database)
...
002525c0: 00030 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00252620: 00060 . 00050 [07] - busy (38), tail fill (NTDLL!LDR Database)
00252670: 00050 . 00040 [07] - busy (22), tail fill (NTDLL!CSRSS Client)
002526b0: 00040 . 00040 [07] - busy (24), tail fill (Objects=  64)
002526f0: 00040 . 00040 [07] - busy (24), tail fill (Objects=  64)
00252730: 00040 . 00028 [07] - busy (10), tail fill (Objects=  40)
00252758: 00028 . 00058 [07] - busy (3c), tail fill (Objects=  88)
002527b0: 00058 . 00010 [04] free fill
002527c0: 00010 . 00058 [07] - busy (3c), tail fill (NTDLL!LDR Database)
00252818: 00058 . 002d0 [07] - busy (2b8), tail fill (Objects= 720)
00252ae8: 002d0 . 00330 [07] - busy (314), tail fill (Objects= 816)
00252e18: 00330 . 00330 [07] - busy (314), tail fill (Objects= 816)
00253148: 00330 . 002a8 [07] - busy (28c), tail fill (NTDLL!LocalAtom)
002533f0: 002a8 . 00030 [07] - busy (18), tail fill (NTDLL!LocalAtom)
00253420: 00030 . 00030 [07] - busy (18), tail fill (NTDLL!LocalAtom)
00253450: 00030 . 00098 [07] - busy (7c), tail fill (BASEDLL!LMEM)
002534e8: 00098 . 00060 [07] - busy (44), tail fill (BASEDLL!TMP)
00253548: 00060 . 00020 [07] - busy (1), tail fill (Objects=  32)
00253568: 00020 . 00028 [07] - busy (10), tail fill (Objects=  40)
00253590: 00028 . 00030 [07] - busy (16), tail fill (Objects=  48)
...
0025ccb8: 00038 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
0025cd18: 00060 . 00058 [07] - busy (3c), tail fill (NTDLL!LDR Database)
0025cd70: 00058 . 00030 [07] - busy (18), tail fill (NTDLL!LDR Database)
0025cda0: 00030 . 00020 [06] free fill (NTDLL!Temporary)
0025cdc0: 00020 . 00258 [07] - busy (23c), tail fill (Objects= 600)
0025d018: 00258 . 01018 [07] - busy (1000), tail fill (Objects>1024)
0025e030: 01018 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
...
002a4190: 00028 . 00118 [07] - busy (100), tail fill (BASEDLL!GMEM)
002a42a8: 00118 . 00030 [07] - busy (18), tail fill (Objects=  48)
002a42d8: 00030 . 00098 [07] - busy (7c), tail fill (Objects= 152)
002a4370: 00098 . 01c90 [14] free fill
002a6000:      000aa000      - uncommitted bytes.

다음은 !heap -l 명령의 예입니다.

1:0:011> !heap -l
1:Heap 00170000
Heap 00280000
Heap 00520000
Heap 00b50000
Heap 00c60000
Heap 01420000
Heap 01550000
Heap 016d0000
Heap 019b0000
Heap 01b40000
Scanning VM ...
## Entry     User      Heap      Segment       Size  PrevSize  Flags

001b2958  001b2960  00170000  00000000        40        18  busy extra
001b9cb0  001b9cb8  00170000  00000000        80       300  busy extra
001ba208  001ba210  00170000  00000000        80        78  busy extra
001cbc90  001cbc98  00170000  00000000        e0        48  busy extra
001cbd70  001cbd78  00170000  00000000        d8        e0  busy extra
001cbe90  001cbe98  00170000  00000000        68        48  busy extra
001cbef8  001cbf00  00170000  00000000        58        68  busy extra
001cc078  001cc080  00170000  00000000        f8       128  busy extra
001cc360  001cc368  00170000  00000000        80        50  busy extra
001cc3e0  001cc3e8  00170000  00000000        58        80  busy extra
001fe550  001fe558  00170000  00000000       150       278  busy extra
001fe6e8  001fe6f0  00170000  00000000        48        48  busy extra
002057a8  002057b0  00170000  00000000        58        58  busy extra
00205800  00205808  00170000  00000000        48        58  busy extra
002058b8  002058c0  00170000  00000000        58        70  busy extra
00205910  00205918  00170000  00000000        48        58  busy extra
00205958  00205960  00170000  00000000        90        48  busy extra
00246970  00246978  00170000  00000000        60        88  busy extra
00251168  00251170  00170000  00000000        78        d0  busy extra user_flag
00527730  00527738  00520000  00000000        40        40  busy extra
00527920  00527928  00520000  00000000        40        80  busy extra
21 leaks detected.

이 예제의 테이블에는 찾은 21개의 누수가 모두 포함되어 있습니다.

다음은 !heap -x 명령의 예입니다.

0:011> !heap 002057b8 -x
## Entry     User      Heap      Segment       Size  PrevSize  Flags

002057a8  002057b0  00170000  00170640        58        58  busy extra

다음은 !heap -x -v 명령의 예입니다.

1:0:011> !heap 002057b8 -x -v
## 1:Entry     User      Heap      Segment       Size  PrevSize  Flags

002057a8  002057b0  00170000  00170640        58        58  busy extra

Search VM for address range 002057a8 - 002057ff : 00205990 (002057d0),

이 예제에서는 주소 0x00205990 이 힙 블록에 대한 포인터가 있습니다.

다음은 !heap -flt s 명령의 예입니다 .

0:001>!heap -flt s 0x50

이렇게 하면 크기 0x50 할당이 모두 표시됩니다.

다음은 !heap -flt r 명령의 예입니다.

0:001>!heap -flt r 0x50 0x80

크기가 0x50 및 0x7F 사이의 각 할당을 표시합니다.

다음은 !heap -srch 명령의 예입니다 .

0:001> !heap -srch 77176934
    _HEAP @ 00090000
   in HEAP_ENTRY: Size : Prev Flags - UserPtr UserSize - state
        00099A48: 0018 : 0005 [01] - 00099A50 (000000B8) - (busy)
          ole32!CALLFRAME_CACHE<INTERFACE_HELPER_CLSID>::`vftable'
    _HEAP @ 00090000
   in HEAP_ENTRY: Size : Prev Flags - UserPtr UserSize - state
        00099B58: 0018 : 0005 [01] - 00099B60 (000000B8) - (busy)
          ole32!CALLFRAME_CACHE<INTERFACE_HELPER_CLSID>::`vftable'

다음 다이어그램은 힙 블록의 배열을 보여 줍니다.

라이트 페이지 힙 블록 -- 할당됨:

 +-----+---------------+---+                                  
 |     |               |   |                                  
 +-----+---------------+---+                                  
    ^         ^          ^                                    
    |         |          8 suffix bytes (filled with 0xA0)    
    |         User allocation (filled with E0 if zeroing not requested) 
    Block header (starts with 0xABCDAAAA and ends with 0xDCBAAAAA) 

라이트 페이지 힙 블록 -- 해제됨:

 +-----+---------------+---+                                  
 |     |               |   |                                  
 +-----+---------------+---+                                  
    ^         ^          ^                                    
    |         |          8 suffix bytes (filled with 0xA0)    
    |         User allocation (filled with F0 bytes)          
    Block header (starts with 0xABCDAAA9 and ends with 0xDCBAAA9) 

전체 페이지 힙 블록 -- 할당됨:

 +-----+---------+---+-------                                 
 |     |         |   |  ... N/A page                          
 +-----+---------+---+-------                                 
    ^       ^      ^                                          
    |       |      0-7 suffix bytes (filled with 0xD0)        
    |       User allocation (if zeroing not requested, filled   
            with C0)       
    Block header (starts with 0xABCDBBBB and ends with 0xDCBABBBB) 

전체 페이지 힙 블록 -- 해제됨:

 +-----+---------+---+-------                                 
 |     |         |   |  ... N/A page                          
 +-----+---------+---+-------                                 
    ^       ^      ^                                          
    |       |      0-7 suffix bytes (filled with 0xD0)        
    |       User allocation (filled with F0 bytes)            
    Block header (starts with 0xABCDBBA and ends with 0xDCBABBBA) 

할당의 스택 추적 또는 힙 블록 또는 전체 페이지 힙 블록의 해제를 보려면 헤더 주소와 함께 dt DPH_BLOCK_INFORMATION 사용하고 블록StackTrace 필드가 있는 dd를 사용합니다.