我正在关注这个stackoverflow帖子 "!heap -flt -s xxxx"windbg命令中的不同列代表什么
我试图了解为其中一个耗费大量内存的堆打印出来的信息.
我可以理解大多数列,但在我的windbg上,我看到一个额外的列.我的大部分作品都标记为内部.我想知道这意味着什么.我做到了!gflags +ust.所以,我可以看到用于进行内存分配的调用堆栈.我可以在大多数条目上执行此操作,但标记为内部的条目除外.
什么是内部是什么意思?它与LFH的实施有关吗?如果这是LFH的内部实现,这些内部堆条目将如何以及何时返回到空闲列表?它现在无缘无故地抬起我的记忆.
以下是!heap -h 0000000002330000供您参考的输出.
Index Address Name Debugging options enabled
8: 02330000
Segment at 0000000002330000 to 0000000002340000 (00010000 bytes committed)
Segment at 00000000032b0000 to 00000000033b0000 (00100000 bytes committed)
Segment at 00000000065a0000 to 00000000067a0000 (00200000 bytes committed)
Segment at 00000000067a0000 to 0000000006ba0000 (00400000 bytes committed)
Segment at 0000000006d80000 to 0000000007580000 (006f2000 bytes committed)
Flags: 08001002
ForceFlags: 00000000
Granularity: 16 bytes
Segment …Run Code Online (Sandbox Code Playgroud) 我在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)
Run Code Online (Sandbox Code Playgroud)
WinDbg文档说这个:
Heap entries for Segment00 in Heap 250000
0x01 - HEAP_ENTRY_BUSY
0x02 - HEAP_ENTRY_EXTRA_PRESENT
0x04 - HEAP_ENTRY_FILL_PATTERN
0x08 - …Run Code Online (Sandbox Code Playgroud)