小编use*_*045的帖子

没有在对象布局中看到同步块

我的理解是,所有.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 …

.net clr

5
推荐指数
1
解决办法
816
查看次数

标签 统计

.net ×1

clr ×1