请教一个!heap -hf的问题

Windows内核调试

请教一个!heap -hf的问题


jlflyfox 2009-07-07, 11:37 上午

我用userdump抓了一个进程的内存,然后用windbg打开看heap的问题,发现一个比较奇怪的地方,如下

!heap 002a0000 -hf

Heap entries for Segment19 in Heap 002a0000
        7e030000: 00000 . 00040 [01] - busy (40)
        7e030040: 00040 . 00fc0 [10]
        7e031000:      007b7000      - uncommitted bytes.
        7e7e8000: 00000 . 00400 [01] - busy (3f4)
        7e7e8400: 00400 . 000a8 [00]
        7e7e84a8: 000a8 . 00028 [01] - busy (20)
        7e7e84d0: 00028 . 00b30 [10]
        7e7e9000:      0014a000      - uncommitted bytes.
        7e933000: 00000 . 00ad8 [00]
        7e933ad8: 00ad8 . 00028 [01] - busy (20)
        7e933b00: 00028 . 00400 [01] - busy (3f4)
        7e933f00: 00400 . 00100 [10]
        7e934000:      000cc000      - uncommitted bytes.
        7ea00000: 00000 . 00fd8 [00]
        7ea00fd8: 00fd8 . 00028 [11] - busy (20)
        7ea01000:      00413000      - uncommitted bytes.
------------------------------------------------------------------------

我奇怪的是那个umcommitted是什么含义啊,为什么分配的时候在进程地址空间不连续啊,就是上面7e030040后面那个7e031000地址怎么有那么多未提及的空间,而不让7e7e8000跟7e030040连接上啊

这样,不是很容易造成内存碎片么

Re: 请教一个!heap -hf的问题


jlflyfox 2009-07-07, 11:55 上午
会不会是这个原因,就是HeapCreate的时候,第三个dwMaximumSize为0,所以heap能自动扩展,然后真正扩展的时候,按msdn的说法需求比0x7FFF8大,则系统实际会调用VirtualAlloc来分配,这个就能一部分解释了7e031000为reserved了

Powered by Community Server Powered by CnForums.Net