我的理解是,所有.NET对象实例都以一个8字节的"对象头"开头:一个同步块(指向SynchTableEntry表的4字节指针)和一个类型句柄(指向类型方法表的4字节指针).
我在VS 2010 RC(CLR 4.0)调试器内存窗口中没有看到这一点.
这是一个简单的类,它将生成一个16字节的实例,而不是对象头.
class Program
{
short myInt = 2; // 4 bytes
long myLong = 3; // 8 bytes
string myString = "aString"; // 4 byte object reference
// 16 byte instance
static void Main(string[] args)
{
new Program();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
SOS对象转储告诉我总对象大小是24个字节.那讲得通.我的16字节实例加上一个8字节的对象标题.
!DumpObj 0205b660
Name: Offset_Test.Program
MethodTable: 000d383c
EEClass: 000d13f8
Size: 24(0x18) bytes
File: C:\Users\Bob\Desktop\Offset_Test\Offset_Test\bin\Debug\Offset_Test.exe
Fields:
MT Field Offset Type VT Attr Value Name
632020fc 4000001 10 System.Int16 1 instance 2 myInt
632050d8 4000002 4 …