Hello,
Tach!
Funktionen werden auf dem Stack ausgeführt, bedeutet doch, dass ihre sämtlichen benötigten Werte und Referenzen dort übergeben werden.
Das wäre nicht sinnvoll, bei Werten, die global oder statisch sind.
Genau! Deshalb wird für diese ja auch eine Referenz übergeben an den Stack und im Code ein Load by Reference programmiert.
Der Funktionscode selber muss nicht kopiert werden. Er enthält Displacements relativ zum Stackbeginn für jede Variable. Für Objekte, statische und globale Variablen enthält der Code einen Load by Reference und bekommt eben diese Referenz vom Stack, weil sie ja mit seiner Hilfe mittels Displacement loziiert werden kann.
Warum soll man sowas tun wollen? Um unnötige Laufzeit beim Auflösen der Adressen zu verbraten? Warum genau sollte der Compiler nicht die Adresse auf dem Datensegment in den Programmcode kompilieren?
Weil der Compiler beachten muss, dass eine Funktion aus unterschiedlichen Kontexten heraus aufgerufen werden kann. Und dann gibt es da noch die Namespaces.
Handelt es sich um eine direkte Variablenübergabe (Kopie), enthält der Code nur ein Direct Load vom Stack. Direct Load bedeutet, dass er das Displacement der Variable auf dem Stack kennt.
Eine Kopie ist ja wohl kein Zugriff auf den globalen Wert.
Nee, hab ich auch nicht behauptet.
Zu Direct Load finde ich nur Marketing- und Logistik-Seiten.
Wenn ich Zeit habe, suche ich mal die Mnemonics aus dem MASM raus und sehe nach, wie die das 1980 benannt haben. Da gab es ja noch kein Internet und es hat wohl keiner für nötig gehalten, die alten Bücher mal einzutippen ;-)
Übergangsweise nennen wir es einfach direkte Adressierung
und indirekte Adressierung
. Wärst Du damit erst einmal einverstanden?
Glück Auf
Tom vom Berg
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.