WinDbgを使用して.NETプロセスのメモリダンプを解析しています。ヒープ上のすべてのSystem.Int32変数のサイズが24バイトと報告されています。ここでは変数の1に該当するDumpObjコールの例です:WinDbgでSystem.Int32変数が24バイトとして表示されるのはなぜですか?
0:000> !DumpObj /d 00000061c81c0e80
Name: System.Int32
MethodTable: 00007fff433f37c8
EEClass: 00007fff42e30130
Size: 24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
00007fff433f37c8 4000456 8 System.Int32 1 instance 141 m_value
私の知る限りでは、サイズ可能System.Int32は4バイトであると考えられます。この不一致の原因は何ですか?
通常のSkeetはこれについてのブログ記事を書いています。 64ビットの場合、24バイトは「最小」サイズです –
[こちら](https://codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings/)はその投稿です(参考用です)。 –
ヒープ上にある場合は、ボックス化されています。つまり、通常のオブジェクトオーバーヘッド(x64ではオブジェクトあたり8バイト、x64ではオブジェクトあたり16バイト)を持ち、4/8バイト境界にアライメントする必要があり、12Bになりますx86では24B、x64では24Bです。 – Groo