web-dev-qa-db-ja.com

ネイティブコードとマネージコードの違いは?

たとえば、GlowCodeプロファイラーのWebサイトを見ると、次のように表示されます。

「GlowCode 6.2およびx64プロファイルのネイティブ、マネージ、および混合C++、C#、. NETコード」

彼らはどういう意味ですか?

53
Joel

ネイティブコードとは、メモリが「管理」されていないコードです。たとえば、メモリは解放されず(C++の削除やCの解放など)、参照カウントやガベージコレクションはありません。マネージコードは、ご想像のとおり、メモリが解放され、ユーザー、ガベージコレクション、その他のグッズに割り当てられているコードです。

混合コードは、アンマネージレイヤーを呼び出すマネージコードがある場合です。通常、管理されていない純粋なC++ DLLがあり、P/invokeを使用して.NETから呼び出す場合。

74
Anzurio

ネイティブコードは、OSと直接動作するようにコンパイルされます。ただし、マネージコードはプリコンパイルされます(Javaの場合はバイトコード)が、Just In Time Compilerによって実行時にネイティブコードに処理されます。マネージコードには、異なるオペレーティングシステムで実行される可能性があるという興味深い副作用があります。マシンコードは、VMが実際に使用するまで作成されないためです。 Windows上のNETアプリ。MonoランタイムがインストールされているLinuxまたはMacでも実行できます。現在、移植性はJava(Microsoftの自然に閉じたアーキテクチャのため)ほどきれいではありませんが、残っています。

管理されていないアプリを実行している場合、指定されたOS /ハードウェアで実行されるようにコードがコンパイルされています。別のOS /命令セットへの移植性は失われ、実行するには再コンパイルする必要があります。

44
Wayne Hartman

ネイティブコードは、実行されているコンピューターの「ネイティブ」マシン言語で記述され、プロセッサーによって直接実行されます。

マネージコードは、別のプログラムを実行(管理)する必要がある特別な言語で記述されています。この他のプログラムは、特別な言語を解釈するため、通訳と呼ばれることがよくあります。

CおよびC++プログラムはネイティブです。

JavaとC#(およびそれに関するすべての.NET言語)が管理されます。

マネージC++は、.NETインタープリターで実行される特別な形式のC++です。

混合プログラムは、ネイティブおよびマネージドの両方のコードを使用するプログラムです。

29
onedozenbagels

共通言語ランタイム(CLR)の制御下で実行されるコードは、マネージコードと呼ばれます。 CLRの下で実行されないコードは、ネイティブコードと呼ばれます。

6
Hanu