我在哪里可以获得有关.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的,但可能仍然有用。
还有另外一个原因,这个CLI信息可能很难得到 – 大部分可能是实现细节,可能会有所不同(例如)MS .NET,CF,MF,Silverlight,Mono(常规),Mono( iPhone)等等。当然从语言角度来看(C#等),这是一个很好的话题。
您必须检查CLI规范( ECMA 335 )。 信息在那里(在这种情况下你是排序的)或它不是(在这种情况下它是一个实现细节)。
如果您真的想看到它们,请了解WinDbg和SOS.dll。 如果您可以深入了解实时调试或转储分析,那么几乎没有任何东西对您来说是不可见的。
问候,