我有兴趣查看对象布局结构,并尝试在 Visual Studio 中使用反汇编。
以下是我的代码:
class myclass
{
public int m_a;
}
myclass myc = new myclass();
myc.m_a = 23;
//I am setting a breakpoint after this line
我打开 Memory1 窗口,并在地址字段中输入 myc。我在输出窗口中获得以下详细信息(使用带有 Intel 编译器的 Windows XP PC 32 位):
0x0148B7BC 1c 93 a7 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00
看来在对象数据前面多了一个指针00a7931c,这使得对象大小增加了4个字节。我的困惑是文档说由于每个对象的标头,对象大小增加了 8 个字节。有人可以指出其他 4 个字节在哪里吗?
From 高级.Net调试-CLR对象的内部结构 http://netinverse.com/devblogs/debugging/advanced-net-debugging-clr-objects-internal-structure/626/:
对象的 CLR 内部结构是:
[DWORD:SyncBlock][DWORD:方法表指针][DWORD:引用类型指针]…[值类型字段的值]…
对象头:[DWORD:同步块]
对象指针:[DWORD:方法表指针][DWORD:引用类型指针]…[值类型字段的值]…
每个对象前面都有一个 ObjHeader (在负偏移处)。 ObjHeader 有一个 SyncBlock 的索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)