Verwalteter Code
Verwalteter Code wird von Visual Basic .NET- und C # -Compilern erstellt. Es läuft auf der CLR (Common Language Runtime), die unter anderem Dienste wie Garbage Collection, Laufzeit-Typprüfung und Referenzprüfung bietet. Also, denken Sie daran , wie „Mein Code wird verwaltet von der CLR.“
Visual Basic und C # können nur verwalteten Code erzeugen. Wenn Sie also eine Anwendung in einer dieser Sprachen schreiben, schreiben Sie eine von der CLR verwaltete Anwendung. Wenn Sie eine Anwendung in Visual C ++ .NET schreiben, können Sie verwalteten Code erstellen, wenn Sie möchten, dies ist jedoch optional.
Nicht verwalteter Code
Nicht verwalteter Code wird direkt in Maschinencode kompiliert. Nach dieser Definition ist der gesamte Code, der von herkömmlichen C / C ++ - Compilern kompiliert wird, "nicht verwalteter Code". Da es zu Maschinencode und nicht zu einer Zwischensprache kompiliert wird, ist es auch nicht portierbar.
Keine freie Speicherverwaltung oder sonst etwas, was die CLR bietet.
Da Sie mit Visual Basic oder C # keinen nicht verwalteten Code erstellen können, wird in Visual Studio der gesamte nicht verwaltete Code in C / C ++ geschrieben.
Die beiden mischen
Da Visual C ++ entweder zu verwaltetem oder zu nicht verwaltetem Code kompiliert werden kann, ist es möglich, beide in derselben Anwendung zu mischen. Dies verwischt die Grenze zwischen den beiden und verkompliziert die Definition. Es ist jedoch erwähnenswert, damit Sie wissen, dass immer noch Speicherlecks auftreten können, wenn Sie beispielsweise eine Bibliothek eines Drittanbieters mit schlecht geschriebenem, nicht verwaltetem Code verwenden.
Hier ist ein Beispiel, das ich beim Googeln gefunden habe :
#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;
}