Speicherverwaltung bei Deklaration einer Referenz
-
Guten Tag liebe Mitglieder
,ich habe eine Frage bzgl. Referenz. Sie ist ja ein Alias-Name einer Variable. Ich frage mich was im Speicher passiert wenn man eine Referenz auf eine Variable deklariert.
Nehmen wir als Beispiel:
int i=13;
------
| 13 | i
------
Adresse 10001int &ref = i;
Wird denn hier dementsprechend so aussehen?
----
| i | ref
----
Adresse 10002Also, der Wert von ref ist nun i ??
Wenn ich jetzt:ref = 17;
dann wirds ja:
------
| 17 | i
------
Adresse 10001----
| i | ref
----
Adresse 10002Ich kann mir eigentlich nicht vorstellen, dass der Compiler bei der Zuweisung ref=17 so "schlau" ist und sagt, "oh.. die 17 muss ich in i abspeichern, nicht in ref"
Warum ist das eigentlich nicht so:
------
| 17 | ref // ref = 17;
------
Adresse 10002Wo liegt hier mein Denkfehler? Kann das sein, dass die Darstellung der Speicheraktivität von mir hier falsch?
Ich bedanke mich für Eure Hilfe.
Viele Grüße aus dem Rheinland,
Dagmar

-
Der Compiler weiß, dass du mit einer Referenz arbeitest und weiß auch, wo im Speicher das Objekt steckt, das die Referenz referenziert (Man sollte es nicht laut sagen, aber im Prinzip könnte man das mit einem Zeiger implementieren und auf Compilerseite ein paar Einschränkungen auf den Zeiger reinfrickeln (Addresse von Zeiger = Addresse vom Objekt, Addresse muss immer gültig sein etc.).
Ich kann aus deinem Beitrag allerdings noch nicht so genau erkennen, ob du weißt, dass die Variablennamen im fertigen Maschinencode überhaupt nicht mehr auftauchen. Variablennamen sind etwas, das der Compiler dazu verwendet, zu wissen, welche Speicherbereiche du auf welche Art und Weise benutzen möchtest. In dem fertigen Erzeugnis (der ausführbaren Datei) sind diese nicht mehr enthalten (Mit der Ausnahme von dynamischen Bibliotheken evtl.)
-
Referenzen werden oft intern wie Zeiger gehandhabt. Für den Programmierer sind sie jedoch sicherer (Referenz muss von Anfang an auf gültiges Objekt verweisen) und einfacher (keine explizite Dereferenzierung).
Teilweise - beispielsweise in folgendem Fall - kann die Referenz durch den Compiler wegoptimiert werden, indem die Variable direkt eingesetzt wird.
int a = 24; int& ref_a = a;