CLR的执行模型(上)

做了一段时间开发,最近重新看了一下C#底层的知识,记录一下。

说明:全文不区分大小写,以后不加额外注释的都遵循这个规则。

1    CLR的执行模型

1.1   将源代码编译成托管模块

公共语言运行时(common language runtime,clr)是多语言平台的运行时,核心功能:内存管理、程序集加载、安全性、异常处理和线程同步等。

将源代码编译成托管模块:C#源代码文件→C#编译器→托管模块(中间语言和元素据)。

托管模块:
(1)PE32/PE32+。PE32可以在32或者64位系统运行,PE32+只能在64位系统运行,还标志文件类型(GUI,CUI,DLL),包含生成时间。

(2)CLR头。主要是CLR版本、flag、main方法的元素据token、模块元素据、资源等。

(3)元素据。

(4)IL代码。将IL编译成本机CPU指令。

1.2   将托管模块合并成程序集

Clr与程序集(是一个或多个模块/资源文件的逻辑分组,是重用、安全性、版本控制的最小单元)工作,而不是模块。

托管模块(IL、元素据)+资源文件(.JPG…)→将多个托管模块和资源文件合并成程序集的工具(C#编译器)→程序集

1.3   加载公共语言运行时

程序集可以是可行性应用程序,也可以是dll,他们都由clr来管理(.net framework框架下,Windows 7及以后系统都自动安装了)。

posted @ 2019-01-09 14:17  GiserDog  阅读(101)  评论(0编辑  收藏  举报