logo

CIL lub MSIL | Język pośredni firmy Microsoft lub wspólny język pośredni

Język pośredni firmy Microsoft (MSIL), znany również jako wspólny język pośredni (CIL), to zestaw instrukcji niezależnych od platformy i generowanych przez kompilator specyficzny dla języka na podstawie kodu źródłowego. MSIL jest niezależny od platformy, w związku z czym można go uruchomić w dowolnym środowisku obsługiwanym przez Common Language Infrastructure, takim jak Windows .INTERNET czas wykonania.
MSIL jest konwertowany na kod maszynowy specyficzny dla konkretnego środowiska komputerowego przez kompilator JIT. Odbywa się to przed wykonaniem MSIL. Ponadto MSIL jest konwertowany na kod maszynowy na podstawie wymagań, tj. kompilator JIT kompiluje MSIL zgodnie z wymaganiami, a nie w całości.

Proces wykonywania w środowisku Common Language Runtime (CLR): Proces wykonania, który obejmuje utworzenie MSIL i konwersję MSIL na kod maszynowy przez kompilator JIT, wygląda następująco:

MSIL lub CIL



ile miast jest w stanach zjednoczonych
  • Kod źródłowy jest konwertowany na MSIL przez kompilator specyficzny dla języka w czasie kompilacji środowiska CLR. Oprócz pliku MSIL w kompilacji tworzone są także metadane. Metadane zawierają informacje, takie jak definicja i podpis typów w kodzie, informacje o czasie wykonywania itp.
  • Zestaw infrastruktury języka wspólnego (CLI) jest tworzony przez złożenie pakietu MSIL. Ten zestaw jest w zasadzie skompilowaną biblioteką kodu używaną do celów bezpieczeństwa, wdrażania, wersjonowania itp. i jest dwojakiego rodzaju, tj. montaż procesu (EXE) i montaż biblioteki (DLL).
  • Kompilator JIT konwertuje następnie język pośredni Microsoft (MSIL) na kod maszynowy specyficzny dla środowiska komputerowego, na którym działa kompilator JIT. MSIL jest konwertowany na kod maszynowy na podstawie wymagań, tj. kompilator JIT kompiluje MSIL zgodnie z wymaganiami, a nie w całości.
  • Kod maszynowy uzyskany za pomocą kompilatora JIT jest następnie wykonywany przez procesor komputera.

Przykład: MSIL jest generowany przez kompilator specyficzny dla języka na podstawie kodu źródłowego podanego poniżej. Aby szczegółowo zrozumieć MSIL, prosty kod źródłowy C# z klasą Demo, która zostanie wydrukowana techcodeview.com podaje się następująco:




using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }>

>

>

tablica ciągów c

MSIL tworzony przez kompilator C# dla kodu podanego powyżej jest podany w następujący sposób:

 // =============== CLASS MEMBERS DECLARATION =================== .class public auto ansi beforefieldinit Demo extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { // .maxstack 8 IL_0000: nop IL_0001: ldstr 'techcodeview.com' IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Demo::Main .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Demo::.ctor } // end of class Demo // =============================================================>

W powyższym MSIL znajdują się kody operacji o długości jednego lub dwóch bajtów. Deklaracje klasy bazowej, z której dziedziczone są wszystkie inne klasy, znajdują się w pliku mscorlib.dll . W metodzie Main(), instrukcja ldstr ładuje ciąg techcodeview.com na stosie. Potem statyka System.Console.Writeline funkcja jest wywoływana i ciąg znaków jest usuwany ze stosu. Na koniec instrukcja ret sygnalizuje koniec wywołania funkcji.
A później .ktor( ) oznacza domyślny konstruktor bez parametrów dla klasy Demo. Ten konstruktor jest automatycznie tworzony przez kompilator dla klasy niestatycznej Demo. Instrukcja call przekazuje konstruktor obiektu bazowego, a instrukcja ret sygnalizuje koniec wywołania funkcji.