!heap -s命令的输出需要澄清

时间:2014-06-19 20:23:18

标签: c++ windows memory-management windbg heap-memory

我试图了解!heap -s命令的输出。我知道每个进程都有一个默认堆,其中所有分配都已完成。应用程序可以创建自己的堆。此输出中的每一行是否显示不同的堆?如果是这样,是否意味着应用创建了如此多的堆或者窗口也可以创建多个堆?

0:000> !heap -s  
          Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast   
                            (k)     (k)    (k)     (k) length      blocks cont. heap   
-------------------------------------------------------------------------------------  
Virtual block: 000000000a790000 - 000000000a790000 (size 0000000000000000)  
Virtual block: 000000000ac50000 - 000000000ac50000 (size 0000000000000000)  
0000000000430000 00000002   48256  31976  48256    558   512     7    2      5   LFH  
0000000000010000 00008000      64      4     64      1     1     1    0      0        
0000000000680000 00001002    1088    368   1088      9     5     2    0      0   LFH  
00000000005e0000 00041002     512      8    512      3     1     1    0      0        
0000000000380000 00001002    1088    408   1088      5     5     2    0      0   LFH  
0000000000840000 00041002     512     16    512      0     1     1    0      0        
0000000000d00000 00001002     512    340    512      3     8     1    0      0   LFH  
00000000003a0000 00041002     512      8    512      3     1     1    0      0        
000000000c3d0000 00001002     512    344    512      3    22     1    0      0   LFH  
000000000c5d0000 00001002     512    336    512      5    10     1    0      0   LFH  
0000000000c80000 00001002      64      8     64      3     1     1    0      0        
000000000c7d0000 00001002      64      8     64      3     1     1    0      0        
000000000b770000 00011002     512     32    512     19     7     1    0      0        
0000000000b70000 00001002    1088    368   1088      8     9     2    0      0   LFH  
000000000d980000 00001002     512      8    512      3     2     1    0      0        
000000000db60000 00001002   64448  37556  64448  34615   196    27    0      0   LFH  
    External fragmentation  92 % (196 free blocks)  
000000000f4b0000 00001002    3136   1928   3136   1198    39     3    0      0   LFH  
    External fragmentation  62 % (39 free blocks)  
0000000015780000 00001002   64064  41784  64064  20339   308    16    0      8   LFH  
    External fragmentation  48 % (308 free blocks)  
000000000e360000 00001002     512      8    512      3     1     1    0      0        
-------------------------------------------------------------------------------------  

1 个答案:

答案 0 :(得分:1)

是的,每行代表不同的堆。进程中运行的任何代码都可以通过调用HeapCreate()来创建堆。该代码包括MS DLL(如msvcrt.dll),第三方DLL和您自己的代码。