回答:
マネージコードは、Visual Basic .NETおよびC#コンパイラが作成するものです。CLR(共通言語ランタイム)で実行されます。CLRは、ガベージコレクション、ランタイム型チェック、参照チェックなどのサービスを提供します。したがって、「私のコードはCLRによって管理されている」と考えてください。
Visual BasicとC#はマネージコードしか生成できないため、これらの言語のいずれかでアプリケーションを作成している場合は、CLRによって管理されているアプリケーションを作成しています。Visual C ++ .NETでアプリケーションを作成している場合は、必要に応じてマネージコードを生成できますが、これはオプションです。
アンマネージコードは、マシンコードに直接コンパイルされます。したがって、その定義により、従来のC / C ++コンパイラーによってコンパイルされたすべてのコードは「アンマネージコード」です。また、中間言語ではなくマシンコードにコンパイルされるため、移植性はありません。
無料のメモリ管理など、CLRが提供するものはありません。
Visual BasicまたはVisual C#ではアンマネージコードを作成できないため、Visual StudioではすべてのアンマネージコードがC / C ++で記述されています。
Visual C ++はマネージコードまたはアンマネージコードのいずれかにコンパイルできるため、同じアプリケーションで2つを混在させることができます。これは2つの間の線をぼかし、定義を複雑にしますが、たとえば、不適切に記述されたアンマネージコードを含むサードパーティのライブラリを使用している場合でも、メモリリークが発生する可能性があることを知っておく価値があります。
これがグーグルで見つけた例です:
#using <mscorlib.dll>
using namespace System;
#include "stdio.h"
void ManagedFunction()
{
printf("Hello, I'm managed in this section\n");
}
#pragma unmanaged
UnmanagedFunction()
{
printf("Hello, I am unmanaged through the wonder of IJW!\n");
ManagedFunction();
}
#pragma managed
int main()
{
UnmanagedFunction();
return 0;
}
マネージコードは、共通言語ランタイム仮想マシン(結果としてバイトコードが生成される)の「管理」の下でのみ必要であり、実行されるコンピュータープログラムコードを識別するためにMicrosoftが作成した差別化です。