2016-07-15 15 views
5

Ich versuche, mich mit dem Konzept von verwaltetem vs nicht verwaltetem Code zu befassen. Korrigieren Sie mich, wenn ich falsch liege, aber verwalteter Code ist alles, was in Bytecode kompiliert wird, während nicht verwalteter Code in Maschinencode kompiliert wird.verwalteter Code im Vergleich zu nicht verwaltetem Code

Ist das korrekt?

+0

Es geht nur um die Garbage-Collection. Was den verwalteten Code auszeichnet, ist, dass der GC Objektverweise finden kann, die der Code verwendet. Der Just-in-Time-Compiler spielt in diesem Schema eine entscheidende Rolle. Er kompiliert MSIL nicht nur zu Maschinencode (wie ein C-Compiler mit C-Code), sondern generiert auch eine Tabelle, die dem GC mitteilt, wo er nach dem Objekt suchen soll Verweise. Diese Tabelle ist der Unterschied, nicht verwalteter Code kann diese Tabelle nicht bereitstellen. –

Antwort

4

Von annakata Antwort: (hoffentlich!)

Managed Code nicht in Maschinencode kompiliert wird, sondern in eine Zwischensprache, die auf einer Maschine von einigen Service interpretiert und ausgeführt wird und daher innerhalb eines Betriebs sicheres Framework, das gefährliche Dinge wie Speicher und Threads für Sie behandelt. Im modernen Sprachgebrauch bedeutet das häufig .NET, muss aber nicht .

Nicht verwalteter Code wird zum Maschinencode kompiliert und daher vom Betriebssystem direkt ausgeführt. Es hat daher die Fähigkeit zu tun schädigende/mächtige Dinge verwalteter Code nicht. Dies ist, wie alles gearbeitet hat, so ist es normalerweise mit alten Sachen verbunden sind wie .dlls

Nun, was unter der Haube vor sich geht? Verwaltet vs nicht verwaltet ist alles über Speicher.

In verwaltetem Code manipuliert der Code den Speicher nicht direkt. Es gibt Anweisungen für eine Laufzeit, die es im Namen des Codes ausführt. Auf diese Weise können unsichere oder illegale Operationen blockiert werden und der Code arbeitet in einer Semi-Sandbox. Verwaltete Sprachen können und haben oft nicht verwalteten Code - das ist die Art der Datenverarbeitung.

Visualisieren Sie Speicher wie ein riesiger Parkplatz. Der Unterschied zwischen einer verwalteten und einer nicht verwalteten Sprache ist wie folgt:

In einer verwalteten Sprache gehen Sie zu dem Valet und erklären, dass Sie 10 Autos geparkt haben möchten. Sie wissen nicht genau wo sie geparkt sind, aber Sie wissen, dass der Kammerdiener sie gerne für Sie zurückholen wird, wann immer Sie wollen. Sie kommen auch nicht zu entscheiden, wo sie geparkt sind - Sie müssen nur den Kammerdiener sagen, dass sie geparkt werden müssen.

In einer nicht verwalteten Sprache ist es Ihre Aufgabe, die Spots auszuwählen. Sie könnten in andere Autos fahren, in Behindertenplätze parken, was auch immer - das gibt Ihnen bessere Leistung (Sie müssen nicht ständig Anweisungen an einen Diener weitergeben) aber können Sie auch viele dumme/gefährliche Fehler machen.

+0

Kann man keine verwaltete Sprache haben, die zum Maschinencode kompiliert? Ich dachte, die Unterscheidung ginge nur darum, einen Müllsammler zu haben oder nicht. Bedeutet einer den anderen? – JamesFaix

+0

Wenn es zu Maschinencode kompiliert wird, dann wäre die einzige Möglichkeit, Features wie einen Garbage Collector hinzuzufügen, eine Menge von Assembly in den Code während der Kompilierung zu emittieren. Das heißt, der sprichwörtliche "Diener" müsste in jede andere Codezeile eingefügt werden, wenn sie in Assembler umgewandelt wurde. – Ares

+0

Was ist mit Old-School-LISP-Reduktionsmaschinen?(Nicht dass du * die * Antwort * wissen solltest oder dass es heutzutage wirklich wichtig ist.) – JamesFaix

Verwandte Themen