2010-12-11 61 views
0

当查看已编译的CIL时,我注意到代码大小包含在已编译的CIL中。它被注释掉了。下面是一个例子.NET CIL代码大小

C#:

static void MakeACar() 
{ 
Car myCar = new Car(); 
} 

CIL:

.method public hidebysig static void MakeAObject() cil managed 
{ 
    //Code size 7 (0x7) 
    .maxstack 1 
    .locals init ([0] class SimpleGC.Car c) 
    IL_0000: newobj instance void SimpleGC.Car::.ctor() 
    IL_0005: stloc.O 
    IL_0006: ret 
} 

是什么代码的大小代表什么?

回答

2

这只是CIL以字节码形式占用的字节数。

(看看你的例子:可以看到的最后一条指令(ret)开始于字节偏移6(IL_0006:)由于ret is encoded as a one-byte opcode,字节码流结束具有6 + 1 = 7个字节的总长度。 )

+0

你是什么意思?这是生成的代码的实际大小,还是新创建的将放置在托管堆上的Car类的大小? – contactmatt 2010-12-11 02:33:26

+0

生成(组装)的CIL代码的实际大小。例如,ret指令具有字节码表示“2A”。 stloc.0也占用1个字节,而newobj指令是1个字节,接着是4个字节的methoddef。 – 2010-12-11 02:39:49