我试图了解 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