175 Stimmen

Was ist verwalteter oder nicht verwalteter Code in der Programmierung?

Ich verwende einen bestimmten Befehl in meinem C#-Code, der gut funktioniert. Es wird jedoch gesagt, dass es sich in "unmanaged" Code falsch verhält.

Was ist verwalteter oder nicht verwalteter Code?

225voto

annakata Punkte 72408

Diese ist ein guter Artikel zu diesem Thema.

Zusammengefasst,

  1. Verwalteter Code wird nicht in Maschinencode kompiliert, sondern in eine Zwischensprache, die von einem Dienst auf einer Maschine interpretiert und ausgeführt wird und daher innerhalb eines (hoffentlich!) sicheren Rahmens arbeitet, der gefährliche Dinge wie Speicher und Threads für Sie handhabt. Im modernen Sprachgebrauch bedeutet dies häufig .NET, aber das muss nicht sein.

Ein Anwendungsprogramm, das innerhalb einer Runtime Engine ausgeführt wird die auf demselben Rechner installiert ist. Die Anwendung kann ohne sie nicht ausgeführt werden. Die Laufzeitumgebung stellt die allgemeine Bibliothek von Software Routinen, die das Programm verwendet, und übernimmt in der Regel die Speicherverwaltung verwaltung. Sie kann auch eine Just-in-Time-Konvertierung (JIT) von Quellcode in ausführbaren Code oder von einer Zwischensprache in ausführbarem Code. Java, Visual Basic und die Common Language Runtime von .NET (CLR) sind Beispiele für Laufzeit-Engines. ( Mehr lesen )

  1. Nicht verwalteter Code wird in Maschinencode kompiliert und daher direkt vom Betriebssystem ausgeführt. Er hat daher die Möglichkeit, schädliche/kräftige Dinge zu tun, die der verwaltete Code nicht kann. So hat früher alles funktioniert, daher wird er normalerweise mit alten Dingen wie .dlls in Verbindung gebracht.

Ein ausführbares Programm, das selbständig läuft. Gestartet vom Betriebssystem Betriebssystem gestartet, ruft das Programm die Softwareroutinen des Betriebssystems auf und nutzt sie. Betriebssystems auf, benötigt aber kein anderes Softwaresystem, um verwendet zu werden. verwendet werden. Assembler-Programme, die in Maschinensprache assembliert wurden Maschinensprache assembliert wurden, und C/C++-Programme, die in Maschinensprache für ein bestimmte Plattform kompiliert wurden, sind Beispiele für nicht verwalteten Code.( Mehr lesen )

  1. Einheimische Code wird oft mit Unmanaged gleichgesetzt, ist aber nicht identisch.

0 Stimmen

Sie meinen, dass wir beim Hacken keine .net-Sprache (C#, C++) verwenden können, oder?

8 Stimmen

@H_wardak Was verstehen Sie unter "Hacken"? Das ist ein sehr allgemeiner Begriff, das ist so, als würde man sagen, dass das Hacken von NORAD und das Hacken einiger Register dasselbe ist.

7 Stimmen

Ich habe einmal von Interviewer gefragt worden, können wir ausführen/schreiben unmanaged Code in C #? Kann mir jemand dabei helfen?

80voto

Patrick Desjardins Punkte 130529

Hier ist ein Text von MSDN über unverwalteter Code .

Einige Bibliothekscodes müssen nicht verwalteten Code aufrufen (z. B. native Code-APIs, wie Win32). Da dies bedeutet, dass der Sicherheitsbereich für verwalteten Code verlassen wird, ist entsprechende Vorsicht geboten.

Hier finden Sie weitere ergänzende Erläuterungen zu Managed Code:

  • Code, der von der CLR ausgeführt wird.
  • Code, der auf die Common Language Runtime, die Grundlage des .NET Framework, abzielt, wird als verwalteter Code bezeichnet.
  • Verwalteter Code liefert die Metadaten, die die CLR benötigt, um Dienste wie Speicherverwaltung, sprachübergreifende Integration, Codezugriffssicherheit und automatische Lebenszeitkontrolle von Objekten bereitzustellen. Der gesamte auf AWL basierende Code wird als verwalteter Code ausgeführt.
  • Code, der in der CLI-Ausführungsumgebung ausgeführt wird.

Für Ihr Problem:

Ich denke, es ist, weil NUnit Ihren Code für UnitTesting ausführen und möglicherweise einige Teil davon, die nicht verwaltet wird. Aber ich bin mir nicht sicher, also nehmen Sie dies nicht für Gold. Ich bin sicher, dass jemand in der Lage sein wird, Ihnen mehr Informationen darüber zu geben. Hoffentlich hilft es!

14 Stimmen

Ich weiß die Mühe, die Sie sich mit Ihrer Antwort gemacht haben, zu schätzen, aber Leute, die nicht wissen, was "verwalteter Code" ist, werden Schwierigkeiten haben, zu verstehen, was Sie in Ihrer Antwort meinen: Sie werden es nicht wissen: "Bibliothekscode", "nicht verwalteter Code", "native Code-API", CLR, die Grundlage des .net-Frameworks, IL, CLI-Ausführungsumgebung usw. usw.

70voto

TJPowell Punkte 741

Wenn Sie an Folgendes denken unverwaltet denken Sie an maschinenspezifischen Code auf Maschinenebene. Wie x86-Assemblersprache. Nicht verwalteter (nativer) Code wird so kompiliert und gelinkt, dass er direkt auf dem Prozessor läuft, für den er entwickelt wurde, wobei alle Betriebssysteme vorerst ausgeklammert werden. Er ist nicht portabel, aber er ist schnell. Sehr einfacher, abgespeckter Code.

Verwaltet Code ist alles von Java bis zum alten Interpretive BASIC, oder alles, was unter .NET läuft. Verwalteter Code wird in der Regel zu einer Zwischenstufe von P-Code oder Bytecode-Anweisungen kompiliert. Dabei handelt es sich nicht um maschinenspezifische Anweisungen, auch wenn sie der Assemblersprache ähnlich sehen. Verwalteter Code isoliert das Programm von der Maschine, auf der es läuft, und schafft eine sichere Grenze, in der der gesamte Speicher indirekt zugewiesen wird, und im Allgemeinen haben Sie keinen direkten Zugriff auf Maschinenressourcen wie Ports, Speicheradressraum, den Stack usw. Die Idee ist, in einer sichereren Umgebung zu arbeiten.

Um z. B. eine verwaltete Variable in eine nicht verwaltete Variable umzuwandeln, müssen Sie das eigentliche Objekt erreichen. Es ist wahrscheinlich in eine zusätzliche Verpackung eingewickelt oder verpackt. Nicht verwaltete Variablen (wie z. B. ein "int") benötigen auf einem 32-Bit-Rechner genau 4 Byte. Es gibt keinen Overhead oder zusätzliche Verpackung. Der Prozess des Übergangs von verwaltetem zu nicht verwaltetem Code - und wieder zurück - wird als " Einmarschieren ". Es erlaubt Ihren Programmen, die Grenze zu überschreiten.

1 Stimmen

Wie interagiert Mashalling dann mit Wert- und Referenztypen? Ich erinnere mich, etwas über MarshalByRefObject, zum Beispiel gesehen.

25voto

Vilx- Punkte 100739

In so wenigen Worten wie möglich:

  • verwalteter Code = .NET-Programme
  • nicht verwalteter Code = "normale" Programme

23 Stimmen

Ein .NET-Programm nicht "normal" ist?

2 Stimmen

@jtate - Ja, das ist ein bisschen übertrieben :) Ich habe versucht, es intuitiver zu machen. Wie auch immer, das ist jetzt über 8 Jahre her. Heutzutage ist diese Unterscheidung bei den unzähligen Programmiersprachen, die im Alltag verwendet werden, in der Tat noch ungenauer, ja.

15voto

Arif Punkte 5226

Verwaltet Code ist das, was die Compiler von C#.Net, VB.Net, F#.Net usw. erzeugen. Er läuft auf der CLR, die unter anderem Dienste wie Garbage Collection, Referenzprüfung und vieles mehr bietet. Stellen Sie sich also vor, dass mein Code von der CLR verwaltet wird.

Andererseits, unverwaltet Code wird direkt in Maschinencode kompiliert. Er wird nicht von der CLR verwaltet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X