Zitat von
SirThornberry:
ich kenn den unterschied
Womöglich doch nicht, oder du beziehst dich auf einen anderen Datentyp als
Integer.
Zitat:
ich wollte damit nur die wirkungsweise von const demonstrieren, nämlich das eine referenz übergeben wird und keine kopie
Das hängt vom Datentyp des Parameters ab. Bei Integern wird bei
const trotzdem eine Kopie auf den Stack gelegt:
Code:
mov eax, [MyInteger] // Wert von MyInteger in eax (=1. Parameter bei register-Call)
call DoSomeWildThings
Bei einem CallByRef müsste der Code so aussehen:
Code:
mov eax, OFFSET MyInteger // Adresse von MyInteger in eax (=1. Parameter bei register-Call)
call DoSomeWildThings
Oder alternativ:
Code:
lea eax, MyInteger // Adresse von MyInteger in eax (=1. Parameter bei register-Call)
call DoSomeWildThings
Bei Arrays und Records stimmt deine Aussage. Eine Faustregel ist: Alles was sich in 4 Bytes reinquetschen lässt, wird bei
const als Kopie auf den Stack übergeben. Alles andere geht als Zeiger auf den Stack.
Zitat:
und das konnte man wunderbar demonstrieren in dem man das const "ignoriert" und den wert innerhalb der funktion ändert.
Das funktioniert bei Integer aber nicht. Egal wierum man das Blatt wendet.