Nutzt eine Variable selbst Speicher?

7

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?

    
xport 31.07.2010, 14:37
quelle

5 Antworten

9

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.

    
Eric Lippert 01.08.2010, 01:04
quelle
12

Ja, sie verbrauchen (zumindest) die Zeigergröße der Maschine.

    
Tassos Bassoukos 31.07.2010 14:38
quelle
3

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 Ссылка

    
Jeow Li Huan 31.07.2010 15:26
quelle
2

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.

    
theburningmonk 31.07.2010 15:33
quelle
1

CLR Profiler verwenden , um jede Schriftgröße zur Laufzeit zu bestimmen

    
Saeedouv 31.07.2010 16:38
quelle

Tags und Links