Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi (const Param:Integer)oder(Param:Integer)-Unterschied? (https://www.delphipraxis.net/49194-const-param-integer-oder-param-integer-unterschied.html)

jbg 7. Jul 2005 19:06

Re: (const Param:Integer)oder(Param:Integer)-Unterschied?
 
Delphi's Code Optimierung ändert nicht die Symantik.

Zitat:

Wohlmöglich sehen bei dir die Assemblerbefehle nur anders aus weil in deinem Beispiel etwas optimiert wird.
Prüfe das bitte nochmal nach, werde ich auch machen, obwohl ich das ja schon gemacht habe bevor ich mein Gegenbeispiel gepostet habe (in Delphi 7)

MyFunc und ShowThat sind aber schon gleich deklarariert?

jbg 7. Jul 2005 19:16

Re: (const Param:Integer)oder(Param:Integer)-Unterschied?
 
Delphi-Quellcode:
function EBP: Cardinal; asm mov eax, ebp end;

// {$O-}
function ShowThat(const Param: Integer): Boolean;
begin
  PInteger(@Param)^ := 9;
  if Cardinal(@Param) <= EBP then // Stack wird von der größeren zur kleineren Adresse hin aufgebaut
    ShowMessage('Param liegt im Stackframe von ShowThat');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  V: Integer;
begin
  V := SpinEdit1.Value;
  ShowThat(V);
  ShowMessage(IntToStr(V));
end;
Da kommt bei mir für SpinEdit1.Value=1 in der MessageBox ein "1" heraus.

Das kann man auch noch anders Beweisen, indem man @Param mit dem EBP-Register vergleicht. Ist @Param kleiner gleich EBP, dann liegt @Param im Stackframe von ShowThat und nicht im Stackframe von Button1Click.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz