我试图了解 32 位和 64 位处理器之间的对象大小差异。假设我有一个简单的课程
class MyClass
{
int x;
int y;
}
所以在 32 位机器上,一个整数是 4 个字节。如果我将 Syncblock 添加到其中(另外 4 个字节),则对象大小将为 12 个字节。为什么显示 16 个字节?
0:000> !do 0x029d8b98
名称:ConsoleApplication1.Program+MyClass
方法表:000e33b0
EE类:000e149c
大小:16(0x10)字节
(C:\MyTemp\ConsoleApplication1\ConsoleApplication1\bin\x86\Debug\ConsoleApplication1.exe)
领域:
MT 字段偏移类型 VT Attr 值名称
71972d70 4000003 4 System.Int32 1 实例 0 x
71972d70 4000004 8 System.Int32 1 实例 0 是
在 64 位机器上,整数仍然是 4 字节,唯一改变的是 Syncblock 将是 8 字节(因为指针在 64 位机器上是 8 字节)。这意味着对象大小将为 16 个字节。为什么显示24字节?
0:000> !do 0x00000000028f3c90
名称:ConsoleApplication1.Program+MyClass
方法表:000007ff00043af8
EE类:000007ff00182408
大小:24(0x18)字节
(C:\MyTemp\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe)
领域:
MT 字段偏移类型 VT Attr 值名称
000007fef4edd998 4000003 8 System.Int32 1 实例 0 x
000007fef4edd998 4000004 c System.Int32 1 实例 0 y