CLR via C#

IoTExpert
• 阅读 2038

CLR是其平台上的语言到达机器上的最后一个经手者,曾经微软是CLR的唯一代码提供者,包括了将IL到机器码,并且将IL中的许多特性进行翻译之后优化执行的功能,与JVM在某些地方存在相似,但是实际上又有多处不同。

什么是CLR

CLR via C#

CLR=公共语言运行时=(Common Language Runtime)

在运行的时候实际上它是操作系统上面的一个层级的系统,通过将托管模块中的IL代码能够被翻译成机器代码以供计算机运行。被称为"运行时"实际上就是因为在程序运行的全程,CLR负责将提交操作到系统的这样一个工作。

如何工作

三个点

  1. 程序集
  2. JIT
  3. 功能模块

首先,支持CLR的编译器将其对应的语言翻译成IL并生成元数据之后,将其封装为托管模块之后,与资源文件一起合并为程序集。

紧接着因为IL无法被计算机原生理解,所以CLR会把IL翻译成机器代码,使得机器得以执行

当程序运行时,CLR同时负责了不同部分的拓展功能,包括除加载程序集以外的所有模块CLR via C#

误区

CLR托管代码比native代码要更慢吗

通常意义上来说是的,尤其是某一段IL代码没有被加载之前,可以认为其比CLR更慢一些,因为存在一个翻译到内存的过程,但是实际上在日常进行运行的时候,因为其实际上也被翻译成了机器代码,所以速度上并没有太大的劣势

CLR与JVM等价吗

不,JVM更多的是做一个类似于CLR中的C#->IL->机器代码的过程,CLR同时包括了线程同步等内容,虽然在现在CLR与JVM的类型已经有一点类似,但是在严格意义上来说,CLR应当是在CLR语言中的JVM类型的超集

CLR只能运行托管代码

并不,实际上可以通过dll等方式连接非托管代码,使得运行与CLR上的语言也可以越过CLR直接操作操作系统的内存与CPU状态或调度等内容

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
Java虚拟机
  代码编译的结果从本地机器码转换为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。计算机只认识0和1,所以我们的程序需要经过编译器翻译成由0和1组成的二进制格式才能由计算机执行。经过技术的发展,将编写的程序编译成二进制本地机器码已经不是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令无关、平台中立的格式作为程序编译后的存储格式。   
Wesley13 Wesley13
3年前
Java程序运行机制及开发环境
Java既是编译型语言,又是解释型语言java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码运行。Java虚拟机JVM不同平台上的JVM不同,但是都提供了相同的接口。开发Java准备1.下
Wesley13 Wesley13
3年前
Java是如何实现跨平台的
一.Java是如何实现跨平台的1.我们编写的Java源码,编译后会生成一种.class文件,称为字节码文件2.Java虚拟机JVM就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。!(https:/
Wesley13 Wesley13
3年前
CLR存储过程
C代码namespaceSayHello{usingMicrosoft.SqlServer.Server;publicclassSayHelloClass{Microsoft.SqlServer.Serve
Wesley13 Wesley13
3年前
C#进阶之路(七)反射的应用
反射在C中的应用还是很多的,但它对代码的性能有一定影响。反射的性能:  使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr需要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的。所以尽量不要使用反射进行编程,对于打算编写一个动态构造类型(晚绑定)的应用程序,可以采取以下的几种方式进行代替:1、通过类的继承关系。让该
Stella981 Stella981
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Wesley13 Wesley13
3年前
.NET中的GC垃圾回收
本章将和大家分享.NET中的GC垃圾回收。托管堆垃圾回收CLR提供GC。1、什么样的对象需要垃圾回收?  托管资源引用类型  托管资源和非托管资源:    托管的就是CLR控制的,例如:new的对象、string字符串、变量等;    非托管不是CLR能控制的,例如:数据库连接、文件流、句柄、打印机连接等;    u
Easter79 Easter79
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Wesley13 Wesley13
3年前
IE浏览器动态网页
<html<body  <palign'center'<fontsize"5"color"red"欢迎加入IE浏览器动态网网页!</font</p  <%   ttime()   hhour(t)   Ifh12Then       clr"bl