@boov

Комментарий по выводу WinDbg?

Разъясните, пожалуйста, назначение некоторых полей вывода отладчика WinDdb в следующем случае:


0:023> !heap -s 0x0B780000

Walking the heap 0b780000 .......Virtual block: 0c620000 — 0c620000 (size 00000000)

Virtual block: 0cfa0000 — 0cfa0000 (size 00000000)

Virtual block: 0dc30000 — 0dc30000 (size 00000000)




0: Heap 0b780000

Flags 00001002 — HEAP_GROWABLE

Reserved memory in segments 64768 (k)

Commited memory in segments 34640 (k)

Virtual bytes (correction for large UCR) 34640 (k)

Free space 1680 (k) (42 blocks)

External fragmentation 4% (42 free blocks)

Virtual address fragmentation 0% (1 uncommited ranges)

Virtual blocks 25 — total 0 KBytes

Lock contention 14

Segments 7

0 hash table for the free list

Commits 0

Decommitts 0


Lookaside heap 0b780688





Интересуют поля фрагментации — External fragmentation и Virtual address fragmentation, что это и в чем разница.

И поле Virtual bytes (correction for large UCR) — что это за память, как она связана с committed и reserved memory.
  • Вопрос задан
  • 2977 просмотров
Пригласить эксперта
Ответы на вопрос 1
mark_ablov
@mark_ablov
UCR — Un Committed Ranges, почти тоже самое что и Reserved/Commited для виртуальной памяти.
Когда аллоцируется сегмент кучи, heap manager запрашивает условно много виртуальной памяти (1M по дефолту, ЕМНИП). Само собой программа не использует сразу всю кучу, поэтому есть commited сегменты в куче, а есть те которые еще не выделены из первоначального блока, отданного VM manager'ом.
В данном случае (вывод !heap) reserved/commited относятся к терминам heap manager'a, и не имеют прямого отношения к reserved/commited VM manager'a.
Virtual address fragmentation и External fragmentation демонстрируют разные масштабы фрагментации — первый это сегменты и их фрагментация, второй — блоки внутри сегментов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы