浅谈.NET CLR的基础知识

开发 后端
在.NET CLR中采用的是所谓的JIT Compilation,它的实现原理与动态编译类似,将source code转换成MSIL,再利用JIT将MSIL转换成本地代码,在运行时,读取Assembly中的元数据进行相关操作。

今天笔者温故了.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#静态构造函数的性能
责任编辑:阡陌 来源: 51CTO
相关推荐

2009-07-15 16:00:34

桥架综合布线

2009-07-27 16:11:01

ASP.NET网页模板

2023-07-04 07:31:06

MapReduce数据处理编程模型

2009-09-09 16:21:13

.NET序列化基础知识

2021-11-05 15:31:01

UbuntuLinux

2009-07-24 17:04:57

ASP.NET中Coo

2013-03-27 15:56:05

Android开发Andriod绘图

2011-11-04 17:26:12

2021-08-18 16:09:39

NestJS

2009-11-10 17:04:29

VB.NET基础知识

2011-09-16 10:13:02

Emacs

2009-04-10 09:35:00

WCDMA基础无线网络

2011-03-29 14:11:20

Cacti基础知识

2010-07-16 11:22:31

Perl

2014-08-20 10:15:45

2023-10-11 14:18:40

C#.Net析构

2009-09-23 11:07:11

Hibernate基础

2010-07-16 10:53:30

Perl基础

2009-04-17 14:22:40

XPathXML基础

2015-06-01 13:35:43

数据中心DCIM
点赞
收藏

51CTO技术栈公众号