using System.Collections.Generic;
using System.Text;
namespace IL_Learn
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = 2;
float c;
c = a + b;
float d = 0;
d = a + b + c;
}
}
}
編譯後ildasm /adv一下,得到:
{
.entrypoint
// Code size 24 (0x18)
.maxstack 2
.locals init (int32 V_0,
int32 V_1,
float32 V_2,
float32 V_3)
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: ldc.i4.2
IL_0004: stloc.1
IL_0005: ldloc.0
IL_0006: ldloc.1
IL_0007: add
IL_0008: conv.r4
IL_0009: stloc.2
IL_000a: ldc.r4 0.0
IL_000f: stloc.3
IL_0010: ldloc.0
IL_0011: ldloc.1
IL_0012: add
IL_0013: conv.r4
IL_0014: ldloc.2
IL_0015: add
IL_0016: stloc.3
IL_0017: ret
} // end of method Program::Main
原來,每次要進行類型轉換,都有csc產生的conv.r4,意思是將棧頂的一個傢伙轉型爲float型,哎,CLR懶死了,連這條指令都由CSC產生!不過,這樣,把儘量多的工作交給編譯器完成,CLR只是簡單的JIT和執行,從而保證了效率。還是應該佩服一下的。