В данном примере иллюстрируется использование функции HeapWalk для вывода информации о всех блоках, содержащихся в куче. Информация выводится в следующем формате:
| Колонка | Описание | Поля структуры TProcessHeapEntry | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Address |
Адрес блока. Адреса блоков, которые имеют атрибут PROCESS_HEAP_REGION и которые содержит информацию о регионе памяти, которым владеет куча, и в которых содержится другие фрагменты, сдвинута вправо. |
lpData |
||||||||||
Size |
Размер фрагмента памяти |
cbData |
||||||||||
Address |
Размер служебной информации |
cbOverhead |
||||||||||
I |
Индекс региона |
iRegionIndex |
||||||||||
Flags |
Атрибуты региона:
|
wFlags |
||||||||||
Rem |
Оставшиеся параметры, специфичные для указанных атрибутов. | hMem, dwCommittedSize, dwUnCommittedSize, lpFirstBlock, lpLastBlock |
Вот типичный вывод данного примера на экран (для основной кучи процесса):
Address Size Head I Flags Rem
==============================================================
130640 0 60 0 R---- 36864 1011712 $130688 $230000
130688 6144 8 0 --B--
131E90 36 12 0 --B--
131EC0 72 8 0 --B--
131F10 34 14 0 --B--
131F40 72 8 0 --B--
131F90 56 8 0 --B--
131FD8 1064 16 0 -----
132408 26 14 0 --B--
132430 62 10 0 --B--
132478 72 8 0 --B--
1324C8 16 8 0 --B--
1324E0 22 10 0 --B--
132500 58 14 0 --B--
132548 72 8 0 --B--
132598 20 12 0 --B--
1325B8 56 8 0 --B--
1325F8 72 8 0 --B--
132648 26 14 0 --B--
132670 62 10 0 --B--
1326B8 72 8 0 --B--
132708 22 10 0 --B--
132728 58 14 0 --B--
132770 72 8 0 --B--
1327C0 26 14 0 --B--
1327E8 62 10 0 --B--
132830 72 8 0 --B--
132880 20 12 0 --B--
1328A0 56 8 0 --B--
1328E0 72 8 0 --B--
132930 32 8 0 --B--
132958 4 12 0 --B--
132968 8 8 0 --B--
132980 16 16 0 -----
132998 34 14 0 --B--
1329C8 18 14 0 --B--
1329E8 696 8 0 --B--
132CA8 788 12 0 --B--
132FC8 788 12 0 --B--
1332E8 36 12 0 --B--
133318 36 12 0 --B--
133348 60 12 0 --B--
133398 24 16 0 -----
1333B8 2344 8 0 --B--
133CF0 472 16 0 -----
133ED0 2344 8 0 --B--
134800 8 8 0 --B--
134810 68 12 0 --B--
134860 1 15 0 --B--
134870 16 8 0 --B--
134888 18 14 0 --B--
1348B0 128 16 0 -----
134938 4088 8 0 --B--
135940 1024 16 0 -----
135D48 4088 8 0 --B--
136D48 1604 12 0 --B--
1373A0 1264 16 0 -----
137898 2000 8 0 --B--
138078 3976 16 0 -----
139000 1011712 0 0 -U---
==============================================================
Как видно из приведенного выше примера, в среднем для описания фрагмента памяти требуется 8 - 16 байт. Как мы увидим позже, в случае менеджера памяти Delphi на описание каждого блока уходит в среднем от 4 до 8 байт.
Создание класса для работы с кучей |
Справочник![]() |
© Mystic, 2002