我在哪里可以获得有关.NET对象模型的内存布局信息的信息?

我想知道.NET构造的内存表示,例如“ interface ”,“ class ”,“ struct ”等。有一本很好的C ++对象模型书 – Stanley的<C ++对象模型内部 >。 Lippman,我想要一本类似于.NET和C#的书。

我已经阅读了一些关于.NET的书籍,但它们主要是关于.NET的逻辑用法。 他们都没有谈到物理内存布局信息。 我认为有必要至少知道.NET的一个实现。

我已经阅读过“ 钻入.NET Framework内部以了解CLR如何创建运行时对象 ”有人可以提供一些关于更深入的书籍和文章的提示吗?

如果此信息不公开。 可以选择Mono或Shared Source CLI等共享源。

非常感谢。

这个信息不容易获得的原因几乎肯定是代表微软的故意。

Microsoft创建了.NET Framework和CLR,因此您不必(过度地)担心对象存储在内存中的位置/方式(实现细节)。 这种“无知”实际上是使用.NET的最大好处之一; 您不必担心手动内存分配,处理器/内存模型等问题。

这样做的另一个好处是它提高了安全性,即它使编写恶意代码变得更加困难,当然不是不可能的。

CLR通过C# by Jeff Richter可能是目前最好的“引擎盖下”类型的.NET信息。 关于.NET类型的布局,第4章,第5章,第20章和第21章可能是最感兴趣的,尽管如上所述,您将找不到与C ++对象模型相同的细节级别。

如前所述,CLR Via C#是一个非常好的信息来源。 如果您想深入了解详细信息,可以查看SSCLI(共享源公共语言基础结构),它是MS源初始.NET Framework实现的早期分支。 当前版本的SSCLI涵盖了大量的框架2.0function集。

http://www.microsoft.com/downloads/details.aspx?FamilyID=8c09fd61-3f26-4555-ae17-3121b4f51d4d

还有一本书涵盖了SSCLI,但那是针对版本1的,但可能仍然有用。

http://www.amazon.com/Shared-Source-Essentials-David-Stutz/dp/059600351X/ref=sr_1_1?ie=UTF8&s=books&qid=1271220840&sr=8-1

还有另外一个原因,这个CLI信息可能很难得到 – 大部分可能是实现细节,可能会有所不同(例如)MS .NET,CF,MF,Silverlight,Mono(常规),Mono( iPhone)等等。当然从语言角度来看(C#等),这是一个很好的话题。

您必须检查CLI规范( ECMA 335 )。 信息在那里(在这种情况下你是排序的)或它不是(在这种情况下它是一个实现细节)。

如果您真的想看到它们,请了解WinDbg和SOS.dll。 如果您可以深入了解实时调试或转储分析,那么几乎没有任何东西对您来说是不可见的。

问候,