次の方法で共有


"マネージド コード" とは

.NET を使用する場合、多くの場合、"マネージド コード" という用語が発生します。 この記事では、マネージド コード 意味について説明し、それに関する追加情報を提供します。

簡単に言うと、マネージド コードは、ランタイムによって実行が管理されるコードです。 この場合、対象のランタイムは、実装 (例: Mono、.NET Framework、.NET Core/.NET 5 以降) に関係なく、共通言語ランタイム または CLR と呼ばれます。 CLR は、マネージド コードを取得し、それをマシン コードにコンパイルしてから実行する処理を担当します。 その上、ランタイムは、自動メモリ管理、セキュリティ境界、型の安全性など、いくつかの重要なサービスを提供します。

これは、"アンマネージ コード" とも呼ばれる C/C++ プログラムを実行する方法とは対照的です。 アンマネージドの世界では、プログラマはほとんどすべてを担当しています。 実際のプログラムは、基本的に、オペレーティング システム (OS) がメモリに読み込んで起動するバイナリです。 メモリ管理からセキュリティに関する考慮事項まで、それ以外はすべてプログラマの負担です。

マネージド コードは、C#、Visual Basic、F# など、.NET 上で実行できる高度な言語のいずれかで記述されます。 これらの言語で記述されたコードをそれぞれのコンパイラでコンパイルしても、コンピューター コードは取得されません。 ランタイムがコンパイルして実行するための中間言語 コードを取得します。 C++ は、Windows 上で実行されるネイティブのアンマネージド バイナリも生成できるため、この規則の 1 つの例外です。

中間言語と実行

"中間言語" (または略して IL) とは これは、高レベルの .NET 言語で記述されたコードのコンパイルの製品です。 これらの言語のいずれかで記述されたコードをコンパイルすると、IL から作成されたバイナリが取得されます。 IL は、ランタイム上で動作する特定の言語とは独立していることに注意してください。興味がある場合は、それについての別の仕様書を読むこともできます。

高レベルのコードから IL を生成したら、それを実行する必要がある可能性が最も高くなります。 ここで、CLR が引き継ぎ、コードを IL から、CPU で実際に実行できるマシン コードに Just-In-Time コンパイル、つまり JIT 処理するプロセスを開始します。 このように、CLR ではコードが実行することを正確に把握しているため、それを効率的に管理できます。

中間言語は、共通中間言語 (CIL) とも呼ばれます。

アンマネージ コードの相互運用性

もちろん、CLR ではマネージド ワールドとアンマネージド ワールドの間の境界を渡すことができます。また、.NET クラス ライブラリでも、これを行う多くのコードがあります。 これは、相互運用性と呼ばれ、略してインターオプ とされます。 これらのプロビジョニングにより、たとえばアンマネージ ライブラリをラップし、それを呼び出すことができます。 ただし、これを行うと、コードがランタイムの境界を越えたときに、実行の実際の管理が再びアンマネージ コードの手に渡されるため、同じ制限に該当する点に注意してください。

これと同様に、C# は、コード内でポインターなどのアンマネージ コンストラクトを直接使用できる 1 つの言語で、安全でないコンテキストと呼ばれるものを使用します。これは、CLR によって実行が管理されていないコードの一部を指定します。

その他のリソース