質問

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)

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)

ただし、ドキュメントでは間隔が奇妙です。それは、「エントリアドレス」と「前のサイズ」と「カーサイズ」を意味しますか、それとも「エントリ」と「前の」と「cur」は以下の行ではありませんか?

「前のサイズ」と「カーサイズ」とはどういう意味ですか?特に「使用されているバイト」に関して。 「使用されているバイト」と「Cur Size」の違いは何ですか?

役に立ちましたか?

解決

ヒープセグメントは、特定のヒープのメモリの連続ブロックです。また、ヒープエントリのチェーンでもあります。

ヒープエントリのリストを前進させるには、次のヒープエントリに到達するために、カーサイズをオフセットとして使用できます。

ヒープエントリのリストを後方に歩くには、前のエントリの先頭に到達するために、前のサイズをオフセットとして使用できます。

ここで(下の写真)、その直前のエントリのサイズ(前のサイズ)とそのサイズ(現在のサイズ)との関係を見ることができます。

Debugger Output Pic

使用されるバイトは、実際に割り当てられていないこのブロックの端にある未使用のバイトの数からサイズを差し引くことによって計算されます。これにより、要求されたサイズを割り当て粒度に丸める前に要求された割り当てのサイズを決定できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top