2010-12-11 78 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