Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: (const Param:Integer)oder(Param:Integer)-Unterschied?

  Alt 6. Jul 2005, 22:35
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.
  Mit Zitat antworten Zitat