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

output of !heap -s command need clarifications

本文关键字:输出 命令 heap      更新时间:2023-10-16

我正在尝试理解!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        
-------------------------------------------------------------------------------------  

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