Wie groß ist eine Objektreferenz in .NET? Variiert es zwischen x86, x64 und/oder AnyCPU Compilierung?Wie groß ist eine Objektreferenz in .NET?
Wenn es einen Unterschied macht, bin ich persönlich an C# interessiert.
Wie groß ist eine Objektreferenz in .NET? Variiert es zwischen x86, x64 und/oder AnyCPU Compilierung?Wie groß ist eine Objektreferenz in .NET?
Wenn es einen Unterschied macht, bin ich persönlich an C# interessiert.
Die Referenz selbst ist im Grunde ein Zeiger. 32 Bit auf einem 32-Bit-Betriebssystem, 64 Bit auf einem 64-Bit-Betriebssystem.
Die Größe des referenzierten Objekts ist komplizierter.
Das habe ich mir gedacht - ich wollte nur um sicherzustellen, dass es nicht mehr in der Laufzeit – arootbeer
ging Ich frage mich, warum 64-Bit-.net hätte einen Zeiger, anstatt eine skalierte Offset in eine Tabelle "Objekte" verwendet? Ein skalierter 32-Bit-Offset hätte für die meisten Anwendungen ausreichen müssen (Anwendungen, die mehr als vier BILLION-Objekte benötigen, könnten ein spezielles "superhumungöses" Speichermodell verwenden), und ich würde denken, dass die zusätzlichen Kosten für die Verwendung skalierter Verschiebungsadressierung geringer wären als durch die verbesserte Cache-Nebenläufigkeit ausgeglichen, die sich aus der Hälfte der Objektreferenzen ergeben würde. – supercat
@supercat, .NET-Entwickler können wählen, ihre App im 32-Bit-Modus zu kompilieren und alle Zeiger werden 32-Bit sein. Dies ist wahrscheinlich am besten für jede Anwendung, die keine 64-Bit-Zeiger benötigt, was die überwiegende Mehrheit der Anwendungen ist. –
Ein Objektverweis ist im Grunde ein Zeiger auf den Speicher, der die Attribute des Objekts enthält. Daher ist die Referenz ein Prozessorwort in der Länge - 32 Bits auf 32-Bit-Plattformen und 64 Bits auf x64.
Gibt es eine Möglichkeit zu messen, wie viel Speicher ein ** "Objekt" ** verbraucht? – Shimmy
Zur Bestimmung der Zeigergröße können Sie System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr))
oder sizeof(IntPtr)
in unsicherem Kontext verwenden.
Edit:
Oder IntPtr.Size
.
kein Duplikat - ich spreche über die Referenz selbst – arootbeer
[Frage im Zusammenhang sehen] [1] [1]: http://stackoverflow.com/questions/26570/sizeof-equivalent- for-reference-types –
mögliches Duplikat von [C# reference variable mem allocation] (http://stackoverflow.com/questions/489805/c-sharp-reference-variable-mem-allocation) – nawfal