2010-12-11 8 views
0

Wenn bei den kompilierten CIL suchen, merke ich, die Codegröße in der kompilierten CIL enthalten ist. Es ist auskommentiert. Unten ist ein Beispiel.NET CIL-Code Größe

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 
} 

Was repräsentiert die Codegröße? Diese

Antwort

2

ist nur die Anzahl von Bytes von der CIL belegt in es Bytecode Form ist.

(Werfen Sie einen Blick auf Ihrem Beispiel: Sie können sehen, dass der letzte Befehl (ret) beginnt bei Byte-Offset 6 (IL_0006:) Da ret is encoded as a one-byte opcode, der Bytecode Strom endet mit einer Gesamtlänge von 6 + 1 = 7 Bytes auf. .)

+0

Was meinst du? Ist dies die tatsächliche Größe des generierten Codes oder die Größe der neu erstellten Car-Klasse, die auf dem verwalteten Heap abgelegt wird? – contactmatt

+0

Die tatsächliche Größe des generierten (zusammengesetzten) CIL-Codes. Zum Beispiel hat eine ret-Anweisung die Bytecode-Darstellung "2A". stloc.0 belegt ebenfalls 1 Byte, und der Befehl newobj ist 1 Byte, gefolgt von einem 4 Byte methoddef. –

Verwandte Themen