【.Net】JIT And Run[翻译]

概述:微软文档 JIT And Run 运行机制的翻译

关键字:#Method Layout #CLR #SystemDomain #SharedDomain #DefaultDomain

相关开源代码:

原文链接:.NET Framework Internals: How the CLR Creates Runtime Objects | Microsoft Learn

建议:在读这篇文章之前,你最好是有相关的 .Net 程序调试经验,并且理解 CLR。

0x01 简介

简要说明

深入到 .Net 框架,查看 CLR 如何在运行时创建对象

这篇文章的主要论点:

  • SystemDomain,ShareDomain,以及 DefalutDomain
  • 对象布局以及内存细节
  • 方法表布局
  • 方法分派

0x02 主要内容

Domains Created by the CLR Bootstrap
System Domain
SharedDomain
DefaultDomain
LoaderHeaps
Type Fundamentals
ObjectInstance
MethodTable
Base Instance Size
Method Slot Table
MethodDesc
Interface Vtable Map and Interface Map
Virtual Dispatch
Static Variables
EEClass
Conclusion

在将来一段时间内,CLR 都将成为在 Windows 中构建应用的主要基础设施。必要的深入了解有助于我们构建高效、工业实力强大的应用程序。在本文中,作者就 CLR 内部结构,包括对象实例布局、方法表布局、方法调用、以及基于接口的方法调用和各种数据结构进行说明。

本文使用 C# 编写的简单示例,所以对任何语言语法的隐式引用都应该默认为 C#,讨论的一些数据结构和算法可能会在 Microsoft .Net 2.0 的框架进行更改,但是概念基本保持一致。作者使用的的环境为 Visual Studio .Net 2003 Debugger 和 调试扩展 SOS(Son of Strike),用以查看本文中所讨论的数据结构。SOS 可以帮助我们理解 CLR 内部数据结构并转储出有用的信息。有关将 SOS 加载到 Visual Sutio 的方法可以查看 SOS 一节。作者将描述在共享源 CLI(SSCLI)中具有相应实现的类。图1将帮助你在SSCLI中浏览数以兆字节计的代码,同时搜索引用的结构。

Item SSCLI Path
AppDomain \sscli\clr\src\vm\appdomain.hpp
AppDomainStringLiteralMap \sscli\clr\src\vm\stringliteralmap.h
BaseDomain \sscli\clr\src\vm\appdomain.hpp
ClassLoader \sscli\clr\src\vm\clsload.hpp
EEClass \sscli\clr\src\vm\class.h
FieldDescs \sscli\clr\src\vm\field.h
GCHeap \sscli\clr\src\vm\gc.h
GlobalStringLiteralMap \sscli\clr\src\vm\stringliteralmap.h
HandleTable \sscli\clr\src\vm\handletable.h
InterfaceVTableMapMgr \sscli\clr\src\vm\appdomain.hpp
Large Object Heap \sscli\clr\src\vm\gc.h
LayoutKind \sscli\clr\src\bcl\system\runtime\interopservices\layoutkind.cs
LoaderHeaps \sscli\clr\src\inc\utilcode.h
MethodDescs \sscli\clr\src\vm\method.hpp
MethodTables \sscli\clr\src\vm\class.h
OBJECTREF \sscli\clr\src\vm\typehandle.h
SecurityContext \sscli\clr\src\vm\security.h
SecurityDescriptor \sscli\clr\src\vm\security.h
SharedDomain \sscli\clr\src\vm\appdomain.hpp
StructLayoutAttribute \sscli\clr\src\bcl\system\runtime\interopservices\attributes.cs
SyncTableEntry \sscli\clr\src\vm\syncblk.h
System namespace \sscli\clr\src\bcl\system
SystemDomain \sscli\clr\src\vm\appdomain.hpp
TypeHandle \sscli\clr\src\vm\typehandle.h

图一 SSCLI 引用


【.Net】JIT And Run[翻译]
https://hodlyounger.github.io/B_Code/CSharp/【.Net】JIT And Run/
作者
mingming
发布于
2024年6月30日
许可协议