电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

IL代码底层运行机制

IL代码底层运行机制_第1页
1/7
IL代码底层运行机制_第2页
2/7
IL代码底层运行机制_第3页
3/7
IL 代码底层运行机制 刘强 Cambest@sohu.com 2003年5月8日 大家都知道,和Java一样,C#也是基于堆栈的语言。也许对一般人来说,底层的运行细节并不是很重要;但了解这些,对我们理解、运用C#是很有帮助的。下面,我就通过一个很简单的例子来说明IL代码的底层运行机制,也许对你会有一些帮助。 我给出的例子表面上看是一个实现整数相减功能的函数;实际上,我也不知道究竟能够干什么。在实际当中,我们的程序当中会有很多种数据类型、引用类型,为了简便起见,我所给出的示例代码只用了一种数据类型,如下所示: public int Sub(int i,int j) { int s; int t = 0; int r = 4; s=i; r =i – j; r + =s + t; return r; } 这段代码很简单,任何学过C#的人都能看懂。首先,传入两个整型变量 i和j,然后经过内部运算,返回一个整型值。函数体内定义了三个局部变量 s,t, r,分别用于保存自定义值以及结果。我们可以将它包装进一个类中,然后将它编译成.dll装配件。运用 VS.NET自带的 ildasm反汇编工具进行反汇编,我们得到如下 IL代码: .method public hidebysig instance int32 Sub(int32 i, int32 j) cil managed { // Code size 22 (0x16) .maxstack 3 .locals init (int32 V_0, int32 V_1, int32 V_2, int32 V_3) ldc.i4.0 stloc.1 ldc.i4.4 stloc.2 ldarg.1 stloc.0 ldarg.1 ldarg.2 sub stloc.2 ldloc.2 ldloc.0 ldloc.1 add add stloc.2 ldloc.2 stloc.3 br.s IL_0014 ldloc.3 ret } IL代码也可以由VS.NET自带的IL编译工具ilasm编译为.dll装配件或.exe可执行文件。 这里,我要对IL中出现的符号作一下简单解释。以点号’.’开头的标号为伪指示代码,只起指示作用,最终不会被 JIT编译为本地可执行代码,如“.method”,“.locals”等。而不带点号’.’的标号为IL汇编代码,它们在运行时将会被 JIT编译为本地可执行代码,如“ldarg.1”等。 每条语句究竟代表了什么样的操作,我们下面在详细讲解。注意:局部变量的下标从 0开始,因此要注意我下面所说的“第零个局部变量”等的含义。 首先,让我们看一看函数体内的第一条语句:.maxstack 3。从其本身我们也可以猜出该语句说明堆栈的大小。暂且不表,且看下文。 第二句:.locals init (int32 V_0, int32 V_1, int32 V_2, int32 V_3) 。V_0、V_1、V_2和我们在 CS源程序中定义的...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

IL代码底层运行机制

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部