Wenn wir eine Variable deklarieren, verbraucht die Variable selbst Speicher?
%Vor%Nutzt die Instanz nullFields mehr Speicher als die Instanz nichts?
BEARBEITEN: Wie verhält es sich mit null lokalen Variablen im Gegensatz zu Nullfeldern der Klasse, verbrauchen sie auch Speicher?
Eine Variable ist definiert als Speicherort. Die Frage ist also: Nutzt ein Speicherort Speicher ?
Wenn Sie es so sagen, klingt es offensichtlich, dass die Antwort ja lautet. Was würde ein Speicherort anders als Speicher verbrauchen?
Es ist nicht so einfach. Eine lokale Variable kann überhaupt keinen Speicher verbrauchen; Eine lokale Variable wird möglicherweise vom Jitter registriert . In diesem Fall würde es weder Stack- noch Heapspeicher verbrauchen.
Warum interessiert es dich? Die Art und Weise, wie die CLR Speicher verwaltet, um Speicherorte für Variablen zu erstellen, ist ein Implementierungsdetail. Wenn Sie keinen unsicheren Code schreiben, müssen Sie sich keine Gedanken darüber machen.
Ja, sie verbrauchen (zumindest) die Zeigergröße der Maschine.
IHaveNothing verbraucht 1 Byte. Es verbraucht ein Byte, um sicherzustellen, dass die Variable eindeutig ist.
IHaveNullFields verbraucht die Größe von zwei Zeigern.
null lokale Variablen verbrauchen die Größe eines Zeigers.
Sie können Marshall.SizeOf verwenden, um die Größe Ihrer Klassen zu bestimmen. Siehe Ссылка
Bei Werttypen enthält die Variable den Wert selbst, bei Referenztypen jedoch das Objekt auf den Heap (den verwalteten Speicherbereich) und die Variable enthält eine Referenz, die auf den Anfang des Speicherblocks zeigt, in dem der Wert enthalten ist Objekt.
Die Größe des Zeigers wird von Ihrem System bestimmt, bei einem 32-Bit-System beträgt der Referenzzeiger 4 Bytes und bei einem 64-Bit-System beträgt der Zeiger 8 Bytes.
Da Referenztypen diesen Overhead pro Objekt erfordern, ist die Empfehlung für einen Typ, den Sie wahrscheinlich viele Male erstellen werden, z. B. Punkt Typ, der in jedem Zeichenprogramm verwendet wird, sollten Sie sie mit struct Schlüsselwort.
CLR Profiler verwenden , um jede Schriftgröße zur Laufzeit zu bestimmen
Tags und Links c#