CLR类内存布局

时间:2012-01-21 09:05:13

标签: .net clr

CLR类的内存布局是什么?

来自C ++背景,带有虚函数的C ++类的内存布局以v表指针开头,然后该类的数据成员在内存中跟随。

具有虚函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员之外,CLR类内存布局中是否还有其他字段?定义数据成员?这些额外的字段代表什么?

2 个答案:

答案 0 :(得分:10)

它是特定于实现的,但是this article给出了对于CLR v2的Microsoft .NET实现中存在的内容的描述。我怀疑它与CLR v4相同,但我不能保证。查找一个名为“ObjectInstance”的部分以获取详细信息 - 但您可能会发现整篇文章很有趣。

根据文章,基本上有两位标题: sync block 用于锁定,类型引用基本上是指向类型的指针信息(包括vtable)。

答案 1 :(得分:1)

原始的“Jit and Run”文章是still around, as a chm file。只需按照MSDN instructions即可阅读:

  

在大多数Windows版本中,您必须先将这些文件保存到您的   本地计算机,然后取消阻止该文件以便读取它。至   取消阻止文件,右键单击它,然后选择属性,然后   选择“解锁”按钮。然后将提供内容   读

然而,古老的Jon Skeet猜错了 - 对象内存布局确实发生了变化。 Sasha Goldstein对布局here进行了最新(CLR v4)调查。