Wo werden Bezeichner für Variablen gespeichert?

9 Antworten

Der Bezeichner wird nicht gespeichert sondern nur die Adresse der Variable im Speicher.

Da auf Desktop CPUs das ausführbare Programm immer im Ram ist, hat auch die Variable immer eine Adresse im Ram.

Tatsächlich schreibe ich gerade selbst einen Compiler, momentan wird da noch nichts in machinecode übersetzt, sondern nur von einer Textdatei ausgelesen und dann direkt ausgeführt. Deswegen sind hier die Variablennamen in einer LinkedHashMap<String,Integer> und somit im ram gespeichert. Wenn der Compiler die Adresse zu einem Namen haben möchte, zieht er sie also aus dieser tablelle. Wenn der Compiler den code dann tatsächlich aus in machinecode übersetzt, wird das allerdings nicht mehr so funktionieren. Dann werden keine Namen mehr gespeichert, sondern die Namen im Text werden dann im compilierten code durch ramadressen(oder mathematische formeln um diese zu errechnen) ersetzt, in denen sich die Adresse der variablen befindet. Das ist aber auch nur bei statischen variablen so, bei Klassen etc. wird das noch mal anders funktionieren.

Der symbolische Name ist ein Service für Dich, gespeichert wird er (außer man lässt Debug-Symbole anlegen) normalerweise gar nicht. Der Compiler ordnet dem Namen eine Adresse zu und wo immer Du die Variable nutzt, wird dann stattdessen die entsprechende Speicheradresse genutzt.

Gar nicht.

Es wird erst ein AST gebaut, und daraus dann Bytecode bzw. Maschinencode erzeugt.

Nur während des Parsens ganz am Anfang wird die Position des Bezeichners im Quelltext temporär vorgemerkt, zur besseren Fehleranalyse.

Bei exportierten globalen Variablen werden Bezeichner hingegen nur als sog. Symbole gespeichert, sind aber intern von der ursprünglichen Variable losgelöst.

Woher ich das weiß:Berufserfahrung

Solange du keine Datei schreibst wird es im Arbeitsspeicher gespeichert (außer der ist zu 100% voll)