Dies ist eine Folgefrage zu Wie werden statische Arrays im Java-Speicher gespeichert? .
Globale Variablen in C/C++ werden also im statischen Datensegment des Speichers gespeichert. Aber was ist mit statischen Klassenvariablen in Java/C++?
Es kann nicht das statische Datensegment sein, weil Sie nicht wissen, welche/wie viele Klassen während der Dauer Ihres Programms referenziert werden (wegen der Reflexion). Es ist definitiv nicht der Stack, denn das macht keinen Sinn. Es auf dem Heap zu speichern ist auch etwas zweifelhaft.
2 Stimmen
Ist dies eine C++ oder eine Java Frage? In C++ sind statische Mitglieder nur globale Variablen.
0 Stimmen
@Kerrek: Ich glaube, er fragt sich nach der Java-Speicherverwaltung von
static
die die C/C++-Verwaltung von ähnlich Konzepte.0 Stimmen
@Six: Klar, ich fand nur "was ist mit statischen Klassenvariablen in Java/C++" etwas verwirrend. Ich freue mich auf die Java-bezogenen Antworten. Übrigens, hat Java haben einen ausdrücklichen "Haufen"?
0 Stimmen
Ich denke, ich frage sowohl nach C++ als auch nach Java. In C gibt es keine Objekte, daher ist die Speicheraufteilung recht einfach. Bei Objekten werden die Instanzvariablen auf dem Heap gespeichert. Was ich jedoch nicht verstehe, ist, wo die Klassenvariablen gespeichert werden.
0 Stimmen
Wie werden Instanzvariablen auf dem Heap gespeichert? In C++ können Sie Ihre Instanzvariablen sehr wohl auf den Stack legen, indem Sie sie mit automatischer Speicherung deklarieren. Ich denke, Sie müssen dies wirklich in zwei Fragen aufteilen, eine für Java und eine für C++...
2 Stimmen
In C++ ist die Situation einfach, weil es keine (portable) Möglichkeit gibt, eine Klasse zur Laufzeit zu laden. In C++ sind die statischen Datenelemente einer Klasse einfach globale Variablen mit einem ausgefallenen Namen, sie werden beim Programmstart erstellt und beim Programmende zerstört... genau wie globale Variablen.
0 Stimmen
@Kerrek SB: Wirklich? Diese Frage scheint zu bestätigen, dass Mitgliedsvariablen immer auf dem Heap gespeichert werden: stackoverflow.com/questions/2820477/
0 Stimmen
@Tskuzzy: Die Frage sagt überhaupt nicht "immer" - sie sagt, dass diese bestimmte Klasse, deren Konstruktor Heap-Speicher alloziert, Objekte dazu bringt, ... Heap-Speicher zu allozieren. Aber man kann viele andere Klassen schreiben, die nicht von sich aus Heap-Speicher belegen.