一、CLR的执行模型(1)
1.1 将源码编译成托管模块
- 公共语言运行时(Common Language Runtime,CLR) 是一个可由多种编程语言使用的“运行时”。CLR的核心功能(内存管理、程序集加载、安全性、异常处理和线程同步)。
- 托管模块: 标准的32位Microsoft Windows 可移植执行体(PE32)文件或者标准的64位Window 可移植执行体(PE32+),它们都需要CLR才能执行。
- 托管模块各个部分(如图1.1.1):
组成部分 说明 PE32或PE32+头 标准的window PE文件头,类型与‘公共对象文件格式’头 CLR头 包括使这个模块成为托管模块信息(可由CLR和一些实用程序进行解释)。头部包含CLR要求的版本一些标志(flag) ,托管模块入口方法(Main)MethodDef元数据token以及模块的元数据、资源、强名称、一些标志及其他不重要的数据项的位置/大小。
元数据 每个托管模块都包含元数据表,主要两张表:1.描述源代码定义的类型和成员.2引用的类型和成员 IL(中间语言)代码 编译器编译源代码时生成的代码。在运行时,|CLR将IL编译成本机CPU指令
图1.1.1
1.2将托管模块合并成程序集
- 程序集 是抽象概念,初学者很难把握它的精髓。首先,程序集是一个或多个模块/资源的逻辑性分组。在CLR的世界中,程序集相当于"组件"。
- 将托管模块合并成程序集
图1.2.1