2010-04-24 2 views
2

나는 나의 DMP 파일에 같은 출력을 참조하십시오windbg! heap 출력에서 ​​'크기'숫자의 의미는 무엇입니까?

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) 

간격 비록 문서의 이상한 :

Heap entries for Segment00 in Heap 00150000 
    00150640: 00640 . 00040 [01] - busy (40) 
    00150680: 00040 . 01808 [01] - busy (1800) 
    00151e88: 01808 . 00210 [01] - busy (208) 
    00152098: 00210 . 00228 [00] 
    001522c0: 00228 . 00030 [01] - busy (22) 
    001522f0: 00030 . 00018 [01] - busy (10) 
    00152308: 00018 . 00048 [01] - busy (3c) 

WinDBG로 워드 프로세서이 말. 그것은 '진입 주소'와 '이전 크기'와 'cur size'를 의미합니까, 아니면 '선행'과 'cur'입니까?

'이전 크기'와 'cur 크기'는 무슨 뜻입니까? 특히 '바이트 사용'과 관련하여 'bytes used'와 'cur size'의 차이점은 무엇입니까?

답변

6

힙 세그먼트는 주어진 힙에 대한 연속적인 메모리 블록입니다. 또한 힙 항목 체인입니다.

힙 항목 목록을 앞으로 걷기 위해 커서 크기를 오프셋으로 사용하여 다음 힙 항목으로 이동할 수 있습니다.

힙 항목 목록을 뒤쪽으로 이동하기 위해 이전 항목의 시작 부분으로 이동하기 위해 오프셋으로 이전 크기를 사용할 수 있습니다.

여기서 (아래 그림) psize (이전 크기) 및 그 직전 항목의 크기 (현재 크기)와의 관계를 볼 수 있습니다.

Debugger Output Pic

사용 바이트

실제로 할당되지 않은이 블록의 끝에서 사용되지 않은 바이트의 개수와 크기를 감산하여 계산된다. 이렇게하면 요청한 크기를 할당 단위로 반올림하기 전에 요청 된 할당 크기를 결정할 수 있습니다.