前言:
买了这本 CLR via C# 已有些日子了,但是一直没有认真翻过这本书,以前学的知识点都忘光了。
趁着现在下着雨的周末,大体记录一下今天了解的笔记,也好弥补一下 C# 知识上的一些盲点。
编译/执行过程:
C# 发展史、借助于谁谁谁,废话都跳过,看图:
// 注明:为了节省时间,此图非 书中原图;
名词注解:
CLR:公共语言运行时(Common Language Runtime),是多种语言使用的“运行时”,只运行(解释)托管模块(IL)
// .NET 下受托管的 dll、exe 文件需要依赖于 CLR 才能解释运行;(也是所谓的 C# 虚拟机 解释型语言)
IL:中间语言(Intermediate Language);编译器编译源代码时生成的代码。在运行时,CLR 将它编辑成本机 CPU 指令;
// C#、VB 等编译器,编译出的文件(程序集)IL,又称“托管模块”(包含中间语言和元数据)
托管模块组成部分:
托管头标识(PE32、PE32+)理解成 x32、x64;
CLR 头,包含要求的 CLR 版本等一些标识信息;
元数据:描述源代码中定义类和成员、以及代码引用的类和成员; // Visual Studio IDE 的智能感知提示,就是通过它。
JIT:CLR 编译器,负责将 IL 编译成本机机器代码(CPU 指令);
// JITCompiler 时会将本机代码进行优化后再度丢给 CPU 执行;
// C# 编译器已经优化的非常不错了,一个开发语言的好坏多半都取决于他们的编译器做的好坏。
// 感兴趣的用 IL_DASM 反编译出来看看,也可以看看国外一些专门做编译器的公司,此文不对编译过程做解释;