浅谈.NET CLR的基础知识
创始人
2024-06-07 12:20:38
0

今天笔者温故了.NET CLR的相关知识,顺便拿出来和大家分享一下,笔者所讲的.NET CLR很基础,希望能给你带来帮助。

大家都知道.NET是支持所谓的多语言的,但其实.NET只有一种语言,就是MSIL,其它所有的语言,按照今天培训课上讲的,就是MSIL的一种子语言。MSIL看起来类似一种汇编语言,想当初,用MSIL做一个虚拟机,做的是云里来,雾里去的,对汇编还是怕的很。

在很多时候,MSIL都被当成一种基于栈的OO形式的汇编语言。而这种语言被.NET CLR所编译,转换成本地执行文件。在这里要注明的是,MSIL并不像其它的汇编语言,它所包含汇编指令不是应用于一台真正的机器上,而一种抽象的机器上,也因为此,基于MSIL的程序可以应用于不同的机器上,这也是MSIL的特点之一。

而在一台机器上,MSIL代码是不能被直接编译的,而是必须首先经过JIT转换成本地代码(native code)。

那么MSIL究竟能做什么呢?呵呵,即然做为.NET CLR的“唯一”的一种语言,凡是你在其它语言里能做到的,就是MSIL所做的。那在编译一个.NET CLR文件中,MSIL具体在何时何地扮演何种角色呢?(很想画个图,可是不知道怎么在CNBlog中实现,好像以前直接从word里可以直接copy,现在不行了) 大概描述一下编译的流程,大家应该就能明白了。

按照传统的编译流程,是将source code 编译成object code,再将object与一个library连接起来编译成binary文件,然后执行binary文件。而随后推出了Dynamic link Compilation, 即动态编译,其指的是将source code编译成一个object code,但是其在编译时不连接libary文件,而是在运行binary文件时,动态连接library 文件。

那可能有人就问,library文件是什么?它其实包含的就是metadata,元数据。而在.NET CLR中采用的是所谓的JIT Compilation, (Just In Time Compilation),它的实现原理与动态编译类似,将source code转换成MSIL,再利用JIT将MSIL转换成本地代码,在运行时,读取Assembly中的元数据进行相关操作。

大概的.NET CLR流程就是这样了,不多说了,这个要说下去,就该谈谈metadata, 还有一些编译过程的细节,比如说JIT Engine, BackPatch, JMI Thunk等一系列的编译机制。

【编辑推荐】

  1. 浅析C#数组操作方法
  2. C#数组操作全面分析
  3. C#数组和串操作经验总结
  4. 为你解疑:CLR是什么?
  5. 分析与对比CLR Via C#静态构造函数的性能

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...