堆积输出中的“大小”数字意味着什么? [英] What do the 'size' numbers mean in the windbg !heap output?
问题描述
我在DMP文件中看到这样的输出:
堆中的Segment00堆条目00150000
00150640: 00640。 00040 [01] - 忙(40)
00150680:00040。 01808 [01] - 忙(1800)
00151e88:01808。 00210 [01] - 忙(208)
00152098:00210。 00228 [00]
001522c0:00228。 00030 [01] - 忙(22)
001522f0:00030。 00018 [01] - 忙(10)
00152308:00018。 00048 [01] - 忙(3c)
WinDbg文档说:
堆中的Segment00堆数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
条目前一个曲线0x80 - HEAP_ENTRY_SETTABLE_FLAG3
地址大小标记(使用字节数) (标签名称)
00250000:00000。 00b90 [01] - 忙(b90)
00250b90:00b90。 00038 [01] - 忙(38)
00250bc8:00038。 00040 [07] - 忙(24),尾巴填充(NTDLL!LDR数据库)
间距是虽然文档很奇怪这是否意味着入场地址和前一个大小和大小,或者是入口prev和cur不是下面的行?
< prev size和cur size是什么意思?特别是关于'使用字节'。 bytes used和cur size之间有什么区别?
堆段是连续的内存块给定堆。它也是一个堆条目链。
要向前移动堆条目列表,我们可以使用Cur Size作为偏移量来获取下一个堆条目。 / p>
要向后移动堆条目列表,我们可以使用Prev Size作为偏移量来获取上一个条目的开头。
这里(下图)可以看到psize(以前的大小)及其与之前条目的大小(当前大小)的关系。
所用字节是通过从未实际分配的该块末尾的未使用字节数减去大小来计算的。这允许您确定在将请求的大小舍入到分配粒度之前请求的分配大小。
I see output like this in my DMP file:
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)
The WinDbg docs say this:
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)
The spacing is weird in the docs though. Does that mean 'entry address' and 'prev size' and 'cur size', or are the 'entry' 'prev' and 'cur' not for the line below?
What does 'prev size' and 'cur size' mean? Especially with regard to 'bytes used'. What is the difference between 'bytes used' and 'cur size'?
A heap segment is a continuous block of memory for a given heap. It is also a chain of heap entries.
To walk a list of heap entries forward we can use the Cur Size as an offset to get to the next heap entry.
To walk a list of heap entries backwards we can use the Prev Size as an offset to get to the beginning of the previous entry.
Here (picture below) you can see the psize (previous size) and its relationship to the size (current size) for the entry just before it.
The Bytes used is calculated by subtracting the size from the the number of unused bytes at the end of this block that were not actually allocated. This allows you to determine the size of the allocation that was requested before rounding the requested size to allocation granularity.
这篇关于堆积输出中的“大小”数字意味着什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!