CLR是其平台上的语言到达机器上的最后一个经手者,曾经微软是CLR的唯一代码提供者,包括了将IL到机器码,并且将IL中的许多特性进行翻译之后优化执行的功能,与JVM在某些地方存在相似,但是实际上又有多处不同。
什么是CLR
CLR=公共语言运行时=(Common Language Runtime)
在运行的时候实际上它是操作系统上面的一个层级的系统,通过将托管模块中的IL代码能够被翻译成机器代码以供计算机运行。被称为"运行时"实际上就是因为在程序运行的全程,CLR负责将提交操作到系统的这样一个工作。
如何工作
三个点
- 程序集
- JIT
- 功能模块
首先,支持CLR的编译器将其对应的语言翻译成IL并生成元数据之后,将其封装为托管模块之后,与资源文件一起合并为程序集。
紧接着因为IL无法被计算机原生理解,所以CLR会把IL翻译成机器代码,使得机器得以执行
当程序运行时,CLR同时负责了不同部分的拓展功能,包括除加载程序集以外的所有模块
误区
CLR托管代码比native代码要更慢吗
通常意义上来说是的,尤其是某一段IL代码没有被加载之前,可以认为其比CLR更慢一些,因为存在一个翻译到内存的过程,但是实际上在日常进行运行的时候,因为其实际上也被翻译成了机器代码,所以速度上并没有太大的劣势
CLR与JVM等价吗
不,JVM更多的是做一个类似于CLR中的C#->IL->机器代码的过程,CLR同时包括了线程同步等内容,虽然在现在CLR与JVM的类型已经有一点类似,但是在严格意义上来说,CLR应当是在CLR语言中的JVM类型的超集
CLR只能运行托管代码
并不,实际上可以通过dll等方式连接非托管代码,使得运行与CLR上的语言也可以越过CLR直接操作操作系统的内存与CPU状态或调度等内容
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。