CLR类的内存布局是什么?
来自C ++背景,带有虚函数的C ++类的内存布局以v表指针开头,然后该类的数据成员在内存中跟随。
具有虚函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员之外,CLR类内存布局中是否还有其他字段?定义数据成员?这些额外的字段代表什么?
答案 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)调查。