共通中間言語 (CIL) とも呼ばれる Microsoft 中間言語 (MSIL) は、プラットフォームに依存せず、ソース コードから言語固有のコンパイラーによって生成される一連の命令です。 MSIL はプラットフォームに依存しないため、Windows などの共通言語インフラストラクチャがサポートする環境のいずれでも実行できます。 。ネット ランタイム。
MSIL は、JIT コンパイラによって特定のコンピュータ環境固有のマシン コードに変換されます。これは、MSIL が実行される前に行われます。また、MSIL は要件に基づいてマシン コードに変換されます。つまり、JIT コンパイラーは MSIL 全体ではなく、必要に応じて MSIL をコンパイルします。
共通言語ランタイム (CLR) での実行プロセス: MSIL の作成と JIT コンパイラーによる MSIL のマシンコードへの変換を含む実行プロセスは次のとおりです。

jtextfield
- ソース コードは、CLR のコンパイル時に言語固有のコンパイラーによって MSIL に変換されます。また、MSIL とともに、コンパイル時にメタデータも生成されます。メタデータには、コード内の型の定義と署名、実行時情報などの情報が含まれます。
- 共通言語インフラストラクチャ (CLI) アセンブリは、MSIL をアセンブルすることによって作成されます。このアセンブリは基本的に、セキュリティ、展開、バージョン管理などに使用されるコンパイルされたコード ライブラリであり、プロセス アセンブリ (EXE) とライブラリ アセンブリ (DLL) の 2 種類があります。
- 次に、JIT コンパイラーは、Microsoft Intermediate Language (MSIL) を、JIT コンパイラーが実行されるコンピューター環境に固有のマシンコードに変換します。 MSIL は要件に基づいてマシン コードに変換されます。つまり、JIT コンパイラーは MSIL 全体ではなく、必要に応じて MSIL をコンパイルします。
- JIT コンパイラーを使用して取得されたマシンコードは、コンピューターのプロセッサーによって実行されます。
例: MSIL は、以下に示すソース コードから言語固有のコンパイラによって生成されます。 MSIL を詳細に理解するには、クラスを含む単純な C# ソース コードを表示するデモを表示します。 techcodeview.com は次のように与えられます。
using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }> |
>
PLSQL
>
上記のコードに対して C# コンパイラによって作成される MSIL は次のようになります。
// =============== 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 // =============================================================> 上記の MSIL には、1 バイトまたは 2 バイトの長さのオペコードがあります。他のすべてのクラスの継承元となる基本クラスの宣言は、 mscorlib.dll 。 Main() メソッドでは、命令 ldstr 文字列をロードします techcodeview.com スタック上にあります。それから静電気 System.Console.Writeline 関数が呼び出され、文字列がスタックからポップされます。最後に、ret 命令は関数呼び出しの終了を通知します。
そうして .ctor( ) ステートメントは、クラス Demo のパラメーターのないデフォルトのコンストラクターを暗黙的に示します。このコンストラクターは、非静的クラス Demo のコンパイラーによって自動的に作成されます。 call 命令は基本オブジェクト コンストラクターを渡し、ret 命令は関数呼び出しの終了を通知します。