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装配件
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
0 stloc
4 stloc
2 ldarg
1 stloc
0 ldarg
1 ldarg
2 sub stloc
2 ldloc
2 ldloc
0 ldloc
1 add add stl