Ich höre / lese manchmal davon, wenn ich über .NET spreche, zum Beispiel "verwalteter Code" und "nicht verwalteter Code", aber ich habe keine Ahnung, was sie sind und was ihre Unterschiede sind. Was ist per Definition ihr Unterschied? Was sind die Konsequenzen der Verwendung von beiden? Gibt es diese Unterscheidung nur in .NET / Windows?
138
Antworten:
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 :
quelle
Dies ist allgemeiner als .NET und Windows. Verwaltet ist eine Umgebung, in der Sie über automatische Speicherverwaltung, Speicherbereinigung, Typensicherheit usw. verfügen. Nicht verwaltet ist alles andere. So ist beispielsweise .NET eine verwaltete Umgebung und C / C ++ ist nicht verwaltet.
quelle
Verwalteter Code ist eine Differenzierung, die von Microsoft geprägt wurde, um Computerprogrammcode zu identifizieren, der nur unter der "Verwaltung" einer virtuellen Common Language Runtime-Maschine erforderlich ist und ausgeführt wird (was zu Bytecode führt).
http://en.wikipedia.org/wiki/Managed_code
http://www.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm
quelle