2010-04-24 66 views
2

我看到這樣的輸出在我的DMP文件:windbg!堆輸出中「大小」數字的含義是什麼?

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) 

WinDbg的文檔這樣說:

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) 

的間距在文檔怪異雖然。這是否意味着'入口地址'和'上一頁大小'和'曲線大小',或者'入口''prev'和'cur'是否不在下面的行?

'prev size'和'cur size'是什麼意思?特別是關於'使用的字節'。 '使用的字節'和'cur size'有什麼區別?

回答

6

堆段是給定堆的連續內存塊。它也是一堆堆條目。

要遍歷堆條目的列表,我們可以使用Cur Size作爲偏移量來獲取下一個堆條目。

要向後移動堆條目列表,我們可以使用「上一個大小」作爲偏移量,以便到達前一個條目的開始位置。

在這裏(圖片下方),您可以看到psize(之前的大小)及其與它之前的條目的大小(當前大小)的關係。

Debugger Output Pic

中使用的字節是由在該塊實際上沒有分配的的端部減去未使用的字節的數量的大小來計算。這允許您在將請求的大小四捨五入爲分配粒度之前確定請求的分配大小。

相關問題