CLR学习(2)

Table of Contents

1 关于CLR是什么?

  1. .NET代码都包含与自己相关的信息叫做metadata。
  2. CLR提供CTS(CLS也有功劳),所以可以在不同编程语言之间共享原代码。
  3. 用metadata管理代码信息(不是利用注册表),所以代码易于安装。
  4. 使用统一的数据类型和类库,所以编程语言的选择变得不重要了,而且易于团队开发。

2 代码在CLR中的运行过程

2.1 选择编译器

首先CLR选择编译器,因为CLR中可以运行不同语言开发出来的代码。

2.2 把代码编译成MSIL

CLR利用编译器生成MSIL(microsoft intermediate language)和metaData把他们加载到PE(Protable executable file)。

MSIL:解释语言,包含代码信息,让JIT易于编译成机器语言。与操作系统和编程语言无关。

PE:可执行文件格式,Windows下就是DLL和EXE

2.3 用JIT编译器把MSIL编译成机器语言

有两种方式:

  • 只编译当前执行的代码段
  • 整个代码一次性编译

JIT会检测代码的安全性

2.4 执行代码

代码首次调用会被编译成机器代码,再次调用的时候就不需要重新编译了。

相关工具:

  • MSIL生成器 - MSIL Assemble(ilasm.exe)
  • MSIL反编译器

3 平台结构

附1:.NET平台结构 dotnetstructure.png

附2:Csharp项目结构 csharpstructure.png

4 参考链接