CLR类的内存布局是什么?
来自C ++背景,具有虚函数的C ++类的内存布局以v表指针开始,然后该类的数据成员在内存中跟随。
具有虚函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员定义的数据成员之外,CLR类内存布局中是否还有其他字段?这些额外的字段代表什么?
CLR类的内存布局是什么?
来自C ++背景,具有虚函数的C ++类的内存布局以v表指针开始,然后该类的数据成员在内存中跟随。
具有虚函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员定义的数据成员之外,CLR类内存布局中是否还有其他字段?这些额外的字段代表什么?
它是特定于实现的,但是 本文 为CLR v2描述了Microsoft .NET实现中的内容。一世 疑似 CLR v4也是如此,但我无法保证。查找名为“ObjectInstance”的部分以获取详细信息 - 但您可能会发现整篇文章很有趣。
根据文章,基本上有两位标题: 同步块 用于锁定,和 类型参考 这基本上是指向类型信息的指针(包括vtable)。
最初的“Jit and Run”文章是 仍在身边,作为一个chm文件。只需按照 MSDN说明 能够阅读:
在大多数Windows版本中,您必须先将这些文件保存到您的 本地计算机,然后取消阻止该文件以便读取它。至 取消阻止文件,右键单击它,然后选择属性,然后 选择“解锁”按钮。然后将提供内容 读
然而,古老的Jon Skeet猜错了 - 对象内存布局确实发生了变化。 Sasha Goldstein对布局进行了最新(CLR v4)调查, 这里。