2008-10-06 3 views
11

Ich hätte gedacht, dass es klar wäre, ob die Speicherzuweisung in verwaltetem Code schneller ist als in nativem Code - but there seems to be some controversy. Vielleicht ist die Speicherverwaltung unter einer virtuellen Maschine schneller, weil keine Aufrufe von Kontextwechseln zum Betriebssystem erfolgen, aber dann sehe ich, dass die VM selbst periodisch mehr Speicher für das Betriebssystem benötigt und den Verwaltungsaufwand für den Speicher selbst hat eher als das Betriebssystem.Ist .NET-Speicherverwaltung in verwaltetem Code schneller als in systemeigenem Code?

Anstatt unbegründete Behauptungen wie ich zu machen, geben Sie bitte Links zu Referenzen, die Ihre Position unterstützen.

Antwort

6

gelesen von

Nehmen http://msdn.microsoft.com/en-us/library/ms973852.aspx

Es geht in einigen Details, wie Speicherzuweisung funktioniert in .NET und vergleicht es kurz mit dem C++ Modell.

Zusammenfassend umfasst die Speicherzuweisung in .NET das Ergreifen des aktuellen Stapelpunkts als Objektadresse und das Hinzufügen der Datengröße des Objekts zum Stapelzeiger. C++ durch Vergleich muss eine Liste von freigegebenen Zeigern für einen Bereich des Heapspeichers durchsuchen, der groß genug für das Objekt ist. In den meisten Fällen wird .NET daher schneller sein.

+0

Würde das nicht zu einem ständig wachsenden Stapel führen? Und Stapelfragmentierung? – Josh

+0

Josh, hier kommt die Garbage Collection ins Spiel. Sie entfernt de-referenzierte Objekte aus dem Heap und verschiebt dann alle verbleibenden Objekte wieder in einen zusammenhängenden Block aus verwendetem Speicher und aktualisiert dann alle betroffenen Referenzen mit den neuen Zeigerwerten. –

+0

So ist Speicherzuweisung in verwaltetem Code schnell, aber die Langsamkeit gelegentlicher Garbage Collection-Ereignisse ist der Kompromiss. –

Verwandte Themen