基础拾遗
基础拾遗------特性详解
基础拾遗------webservice详解
基础拾遗------redis详解
基础拾遗------反射详解
基础拾遗------委托详解
基础拾遗------接口详解
基础拾遗------泛型详解
基础拾遗-----依赖注入
基础拾遗-----数据注解与验证
基础拾遗-----mongoDB操作
基础拾遗----RabbitMQ
基础拾遗---CLR
前言
clr(公共语言运行时)
一个可由多种编程语言使用的"运行时",它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR的核心功能(内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。所以只要面向clr我们可以运用任何语言,这就告诉我们我们可以根据自己的需求用最合适的编程语言。
我们不管用什么变成语言总之会编写相关的源代码,那么不同的开发语言都会有不同的源文件,这些不同的源文件都会选择不同的编辑器但最终他们都是托管模块。如图是其过程与托管模块的:(ps:图片来源于CLR via C#)
继续向下以上托模块可合并成程序集,其实clr 就是和程序集进行工作的而非托管模块。我们可以理解为由一或者多个模块/资源文件的逻辑性组合。程序集是重用、安全性以及版本控制的最小单元。在CLR世界中,程序集相当于“组件”如图可以看出一些托管模块 与 一些资源文件 交给一个工具处理,生成一个PE32(+)文件,这些托管模块与资源文件合并到了一起,并多了一个清单(清单的作用类似于元数据对托管代码的作用)。程序集同时包含 元数据与IL。
元数据
IL代码由面向CLR的编译器产生,但它并不是编译器产生的提供给运行时仅有的东西。编译器同样产生有关原始代码的元数据。它提供给CLR关于代码更多的东西,例如:各种类型的定义、各种类型成员的签名以及其他数据。基本上,元数据是类型库、注册表内容和其它用于COM的信息。尽管如此,元数据还是直接和执行代码合并在一起,并不处在 隔离的位置。简单地说,它实现了编程语言、类型和对象的无缝集成。
IL的概念
IL是独立于CPU且面向对象的指令集。.NET平台将其之上的语言全都编译成符合CLS(公共语言规范)的IL指令集,接着再由不同的编译器翻译成本地代码,比如我们常见的JIT编译器,如果在Mac上运行C#可通过Mac上的特定编译器来将IL翻译成Mac系统能够执行的机器码。也就是说IL正如它的名字一样是作为一种中间语言来执行动态程序,比如我们调用一个方法表中的方法,这个方法会指向一个触发JIT编译器地址和方法对应的IL地址,于是JIT编译器便将这个方法指向的IL编译成本地代码。生成本地代码后这个方法将会有一条引用指向本地代码首地址,这样下次调用这个方法的时候将直接执行指向的本地代码。