AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi (const Param:Integer)oder(Param:Integer)-Unterschied?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von sniper_w · begonnen am 6. Jul 2005 · letzter Beitrag vom 7. Jul 2005
 
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

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

  Alt 6. Jul 2005, 23:02
Zitat von SirThornberry:
und SpinEdit1.Value = 5 ist, dann
wirst du bei deinem ShowMessage dann sehen das test1 auf einmal 5 ist
Da stimmt doch was nicht. Wenn ich beim SpinEdit eine 5 einstelle und dann nach deiner Theorie dann doch eine 5 sehe, obwohl nach deiner Theorie ein 9 da stehen muss, dann kann da doch was nicht stimmen

Das const hat bei Integer nur die Wirkung, dass der Compiler den Parameter nicht verändern lässt. Er wird aber immernoch mit ByValue übergeben. const hat hauptsächlich bei Strings eine besondere Bedeutung. Fehlt es dort nämlich, muss der Compiler einen try/finally Block aufbauen, der die Referenzzählung des Strings verwaltet. Ansonsten könnte man ja den String nach außen hin verändern (Seiteneffekt). Und genau hier ist das const eine Optimierung, die einiges an Geschwindigkeit aus so manchen Programmen herausholen kann.

Probiert mal folgenden Code einmal ohne "const" und dann mit aus. Da braucht man nicht mal einen Profiler um den Geschwindigkeitsunterschied feststellen zu können. Ein Breakpoint
Delphi-Quellcode:
procedure Stupid({const} S: string);
begin
  Length(S); // damit da nichts wegoptimiert wird
end;

procedure DoSomething;
var
  A: string;
  i: Integer;
begin
  A := 'Hallo';
  A := A + ' du da'; // damit A keinen Konstanten-Referenzzähler hat (=-1)
  for i := 0 to 50000000 do
    Stupid(A);
end;

initialization
  DoSomething; // hier Breakpoint setzen (F5), Programm staten (F9) und drüber steppen (F8)

end.
Vorausgesetzt ist natürlich immer, dass man die String-Parameter in der Funktion auch nicht ändert, also ein const überhaupt möglich ist.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz