当前位置:首页 > 房产信息

clr C#中CLR与IL

CLR在。网络平台

首先。NET平台和C#不一样,它是C#、VB.net等程序运行的平台。

CLR是公共语言运行库,也是。. NET框架。它提供内存管理、线程管理、异常处理等服务。它还负责对代码实施严格的类型安全检查,确保代码的正确性。

事实上,许多C#特性,如类型检查器、垃圾收集器、异常管理器和向后兼容性,都是由CLR提供的。

什么是IL

那个。NET框架是基于Windows平台的虚拟运行平台。你可以想象用其他操作系统比如Linux代替最底层的Windows,可以实现对。符合cls(公共语言规范)的. NET语言,这其实是Mono打算实现的功能。所以理论上C#是跨平台语言。

C#更像Java的另一个地方是,它也是一种语言(特殊意义上)。与Java一样,C#编写的程序代码首先由C#编译器编译成一种特殊的字节码(微软中间语言,MSIL,微软)中间语言,然后由特定的编译器(JIT编译器,JIT)在运行时编译成机器码用于(JIT入门。你可以看这个博客,请点击这里)

IL是一种中间语言,各种高级语言(如C#,VB,F#)的编译器都在上面。NET平台会把自己的文字表达式转换成IL。各种形式的文字最终统一到了IL的表达中

CLR加载IL后,第一次执行每个方法的时候,都会用JIT把IL代码编译成机器码。机器码和汇编其实是一一对应的。可以理解为汇编是机器码的字面表达,提供了一些助记符让人记忆。

对于同一个IL,JIT会为不同的CPU架构生成不同的机器码(比如x86/IA64等。).

C #代码及其对应的IL中间代码

C#

一个

2

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

//hidebysig指令表示如果当前类是父类,则用该指令标记的方法不会被子类继承

//cIL托管表示方法体中的代码是IL代码和托管代码,即运行在CLR运行时的代码

。方法private hidebysig StaticyVintMain(string[]args)cil managed

{

。entrypoint//这个指令代表函数程序的入口函数。每个托管应用程序只有一个入口函数。当CLR加载应用程序时,它从。入口点函数。

。maxstack2//执行构造函数时,计算堆栈可以容纳的最大数据项数量。评估堆栈是存储方法中所需变量值的内存区域,在方法执行结束时将被清除空,或者存储返回值。

。局部变量初始化(

[0]int32 num,

[1]int32 num2,

[2]int32 num3)//表示定义int类型的变量,变量名分别为num,num,num2,num3。存储在调用堆栈中。

L _ L _ 0000:nop//没有操作就是没有操作。

L_0001:ldc.i4.1 //将“1”推入评估堆栈,“1”位于评估堆栈的顶部。

L_0002:stloc.0 //此指令指示从评估堆栈中弹出该值,并将其分配给调用堆栈的第0个变量num。

L_0003:ldc.i4.2

L_0004:stloc.1

L_0005:ldc.i4.3

L_0006:stloc.2// from。局部变量init为l _ 0006,相当于C#代码中给I,j,k赋值。

L_0007:ldloc.0 //取调用栈中位置为0的元素,按入求值栈(取I的值)。

L_0008:ldloc.1 //获取调用堆栈中位置1的元素,并将其压入评估堆栈(获取j的值)。

L_0009:add //做加法运算

L_000a:ldloc.2//取调用栈中位置2的元素,按入求值栈(取k的值)。

L_000b:add //做加法运算

L _ 000c: callvoid [mscorlib]系统。console::write line(int 32)//调用output方法

l _ 0011:nop//无操作

L _ 0012: callvaluetype [mscorlib]系统。consolekeyinfo [mscorlib]系统。console::ReadKey()//调用read key方法

L_0017:pop//清除评估堆栈的内容空

L_0018:ret //return标记返回值

}//主方法结束

通过上面的代码,我们可以总结:。maxstack:代码中的变量需要在调用栈中占据几个位置;。localsint (…):定义变量的初始化,并将它们放在调用堆栈中;Nop:不做手术,不做手术;Ldstr: loadstring,将字符串推入求值堆栈;

Ldc.i4.1:将值2以长度为4字节的整数形式压入求值栈;Stloc:弹出求值栈中的值,赋给调用栈;Ldloc:复制调用栈中指定位置的值,按入求值栈;调用:调用指定的方法。该指令一般用于调用静态方法;Callvir一般用于调用实例方法;Ret:返回,标记返回。

让我们看另一个例子

C#

一个

2

10

11

12

13

14

15

16

17

18

19

20

21

22

名称空间测试控制台

{

classProgram

{

[MethodImpl(MethodImplOptions。无链接)]

privatestaticvoidSomeMethod()

{

控制台。写线(“你好世界!”);

}

staticvoidMain(字符串[]参数)

{

控制台。写线(“在JITed之前。”);

控制台。ReadLine();

some method();

控制台。write line(" JiTed后");

控制台。ReadLine();

}

}

}

与之对应的主要方法IL代码:

C#

一个

2

10

11

12

13

14

15

16

17

18

19

20

21

22

23

。方法private hidebysig StaticyVintMain(string[]args)cil managed

{

。入口点

. maxstack8

//指定字符串“在JITed之前”

l _ 0000:ldstr“JiTed之前”

//调用控制台。写线方法

L_0005:调用void[mscorlib]系统。控制台::写线(字符串)

//调用控制台。读取线方法

L_000a:调用字符串[mscorlib]系统。控制台::ReadLine()

L_000f:pop

//调用程序。某些方法方法方法

L_0010:调用虚空测试控制台。程序::SomeMethod()

//指定字符串“JITed之后”

l _ 0015:ldstr“JiTed后”

//调用控制台。写线方法

L_001a:调用void[mscorlib]系统。控制台::写线(字符串)

//调用控制台。读取线方法

L_001f:调用字符串[mscorlib]系统。控制台::ReadLine()

L_0024:pop

L_0025:ret

}

1.《clr C#中CLR与IL》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《clr C#中CLR与IL》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/1132533.html

上一篇

平板喷绘机 uv平板喷绘机解说

下一篇

两色风景嘎 福建这么多网红,你最喜欢哪一个?

什么中药降血压效果好 高血压怎么办 中医告诉你什么方法降压好

  • 什么中药降血压效果好 高血压怎么办 中医告诉你什么方法降压好
  • 什么中药降血压效果好 高血压怎么办 中医告诉你什么方法降压好
  • 什么中药降血压效果好 高血压怎么办 中医告诉你什么方法降压好

沙发电视精灵 夏普电视通用教程 安装沙发管家方法

  • 沙发电视精灵 夏普电视通用教程  安装沙发管家方法
  • 沙发电视精灵 夏普电视通用教程  安装沙发管家方法
  • 沙发电视精灵 夏普电视通用教程  安装沙发管家方法

多肉的养殖方法和注意事项 多肉植物千佛手的养殖方法和注意事项

  • 多肉的养殖方法和注意事项 多肉植物千佛手的养殖方法和注意事项
  • 多肉的养殖方法和注意事项 多肉植物千佛手的养殖方法和注意事项
  • 多肉的养殖方法和注意事项 多肉植物千佛手的养殖方法和注意事项

千佛手 多肉植物千佛手的养殖方法和注意事项

  • 千佛手 多肉植物千佛手的养殖方法和注意事项
  • 千佛手 多肉植物千佛手的养殖方法和注意事项
  • 千佛手 多肉植物千佛手的养殖方法和注意事项

多肉养殖注意事项 多肉植物千佛手的养殖方法和注意事项

  • 多肉养殖注意事项 多肉植物千佛手的养殖方法和注意事项
  • 多肉养殖注意事项 多肉植物千佛手的养殖方法和注意事项
  • 多肉养殖注意事项 多肉植物千佛手的养殖方法和注意事项
剑网三团队监控 剑网3团队事件监控怎么使用?剑网3团队事件监控使用方法。团队事件监控是

剑网三团队监控 剑网3团队事件监控怎么使用?剑网3团队事件监控使用方法。团队事件监控是

王剑3 PVE的一件非常非常重要的事情,直接把这本书的打字难度降低了无数个等级。如果没有团队事件监控,我估计现在25个普通的1~8个很少能过。下面牛游戏网边肖将介绍下剑网3队事件监控的用法!第一次使用或者在游戏中发现找不到团队事件监控时使用。我们需要从游戏官方频道下载团队事件监控。小白下载后...

剑网3团队监控 剑网3团队事件监控怎么使用?剑网3团队事件监控使用方法。团队事件监控是

剑网3团队监控 剑网3团队事件监控怎么使用?剑网3团队事件监控使用方法。团队事件监控是

王剑3 PVE的一件非常非常重要的事情,直接把这本书的打字难度降低了无数个等级。如果没有团队事件监控,我估计现在25个普通的1~8个很少能过。下面牛游戏网边肖将介绍下剑网3队事件监控的用法!第一次使用或者在游戏中发现找不到团队事件监控的时候使用。我们需要从游戏官方频道下载团队事件监控。小白下...

女生长小胡子原因 女生长胡子的原因及治疗方法

女生长小胡子原因 女生长胡子的原因及治疗方法

很多人觉得女生留胡子很不可思议。事实上,现实生活中确实有一些女孩留胡子。那么这些女生留胡子的原因是什么呢?女生一旦长了胡子,应该如何对待?有胡子的女生吃什么食物可以改善?接下来我们会一一介绍,供大家参考。  声明:如果在图像源网络上有任何侵权行为,请通知我们 女生留胡子的原因及处理 第一,女...