.net CLR类内存布局

.net CLR类内存布局,.net,clr,.net,Clr,CLR类的内存布局是什么 < C++ > C++背景下,具有虚拟函数的C++类的内存布局从V表指针开始,然后类的数据成员跟随内存。 具有虚拟函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员定义的数据成员外,CLR类内存布局中是否还有其他字段?这些额外字段代表什么?它是特定于实现的,但描述了CLR v2的Microsoft.NET实现中的内容。我怀疑CLRV4也是这样,但我不能保证。有关详细信息,请参阅名为“ObjectInstance”的部分,但您可能会发现整篇文

CLR类的内存布局是什么

< C++ > C++背景下,具有虚拟函数的C++类的内存布局从V表指针开始,然后类的数据成员跟随内存。
具有虚拟函数的CLR类是否具有v表指针?这个指针是类内存布局中的第一个字段吗?除了程序员定义的数据成员外,CLR类内存布局中是否还有其他字段?这些额外字段代表什么?

它是特定于实现的,但描述了CLR v2的Microsoft.NET实现中的内容。我怀疑CLRV4也是这样,但我不能保证。有关详细信息,请参阅名为“ObjectInstance”的部分,但您可能会发现整篇文章都很有趣

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

原始的“Jit和Run”文章是。只需遵循以下步骤即可阅读:

在大多数版本的windows上,必须首先将这些文件保存到 本地计算机,然后取消阻止该文件以读取它。到 取消阻止文件,右键单击该文件,然后选择“属性”,然后单击 选择“取消阻止”按钮。然后内容将提供给用户 阅读


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

C#类的内存布局通常由抖动决定,因此只在运行时显示(尽管有一些例外)。C#对内存布局没有任何意见。这是关于CLR类的。如果您想以更实际的方式查看VTable,您可以按照下面的帖子运行
!DumpMT-MD address
命令位于WinDbg,此链接已断开:(@MrAnderson更新的链接添加在单独的答案中。