Что означают числа 'size' в выводе кучи windbg!? - PullRequest
2 голосов
/ 25 апреля 2010

Я вижу вывод в этом файле DMP:

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 говорят это:

    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)

Интервал в документах странный. Означает ли это «адрес входа» и «предыдущий размер» и «размер cur», или «entry», «prev» и «cur» не для строки ниже?

Что означают «предыдущий размер» и «размер керна»? Особенно в отношении «используемых байтов». В чем разница между «используемыми байтами» и «размером cur»?

1 Ответ

6 голосов
/ 27 апреля 2010

Сегмент кучи - это непрерывный блок памяти для данной кучи. Это также цепочка записей в куче.

Чтобы пройти список записей кучи вперед, мы можем использовать размер Cur в качестве смещения для перехода к следующей записи кучи.

Чтобы просмотреть список записей кучи в обратном направлении, мы можем использовать предыдущий размер как смещение, чтобы перейти к началу предыдущей записи.

Здесь (рисунок ниже) вы можете увидеть psize (предыдущий размер) и его отношение к размеру (текущему размеру) для записи непосредственно перед ней.

Debugger Output Pic

Используемые байты рассчитываются путем вычитания размера из числа неиспользованных байтов в конце этого блока, которые фактически не были выделены. Это позволяет определить размер запрошенного выделения перед округлением запрошенного размера до степени детализации распределения.

...