Operator << überladen fehlgeschlagen



  • Nein falsch. Du kennst zur Compilezeit nur relative Adressen.
    Der Compiler kann ja nicht wissen wo später das Programm im Speicher liegt.

    Eine Referenz verhält sich nach wie vor wie ein Zweitname auf eine Variable.

    Betrachte dir doch mal genauer, was genau eine Variable ist.

    Speicher, der reserviert wurd und mittels eines Aliasnamen(Variablennamen) über seine Adresse auf den tatsächlichen Speicher dereferenziert wird.

    Vielleicht kannst du ja mal den von dir angeführten maschinencode Posten.



  • erstie schrieb:

    Nein falsch. Du kennst zur Compilezeit nur relative Adressen.
    Der Compiler kann ja nicht wissen wo später das Programm im Speicher liegt.

    Dann besteht der Unterschied eben darin, daß du bei der lokalen Variable zur Compilezeit weißt, worauf sich diese relative Adresse bezieht (der Compiler kennt seine Architektur, also kann er fest eincodieren, daß sich der benötigte Wert z.B. 8 Byte vom aktuellen Stack-Pointer entfernt befindet). Bei einer Referenz oder einem Pointer weißt du erst zur Laufzeit, wo im Speicher sich der benötigte Wert befindet, also kannst du die Adresse nicht durch durch ein simples "SP+k" ermitteln.

    Betrachte dir doch mal genauer, was genau eine Variable ist.

    Speicher, der reserviert wurd und mittels eines Aliasnamen(Variablennamen) über seine Adresse auf den tatsächlichen Speicher dereferenziert wird.

    Dieser Variablenname existiert aber nur in deinem Quelltext, beim Prozessor kommt nur noch die Adresse als "SP+k" an.
    Bei einer Referenz liegt der tatsächlich reservierte Speicher irgendwo im RAM (wenn überhaupt) und du mußt noch zusätzlich im lokalen Stack-Frame Platz bereitstellen, um zu notieren, wo der Wert steht.

    Vielleicht kannst du ja mal den von dir angeführten maschinencode Posten.

    Kann ich leider nicht, dazu mußt du drei Etagen tiefer nachfragen.

    PS: Und dabei beziehe ich noch nicht einmal die Tatsache ein, daß int-Variablen so klein sind, daß der Compiler eventuell gar keinen Speicher für sie reserviert, sondern sie direkt in ein Register packt - mit Referenzen ist das nicht unmittelbar möglich.


Anmelden zum Antworten