AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantenparameter

Ein Thema von Cöster · begonnen am 23. Sep 2006 · letzter Beitrag vom 4. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Konstantenparameter

  Alt 23. Sep 2006, 19:04
Hi!

Sollte man in selbst deklarierten Methoden Konstantenparameter den anderen Parametern vorziehen?

Denn in der Delphi-Hilfe steht:
Zitat:
Die Verwendung von const ermöglicht dem Compiler die Optimierung des Codes für strukturierte und String-Parameter.
Bei der procedure Delay z.B. wäre es doch dann wahrscheinlich besser, die Millisekunden als Konstantenparameter zu deklarieren.

Deswegen wundert mich, dass an anderer Stelle in der Hilfe steht:
Zitat:
Die meisten Parameter sind Wert- (Standard) oder Variablenparameter (var).
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Konstantenparameter

  Alt 23. Sep 2006, 19:08
Grundsätzlich: Jein.

Wenn du Records oder Strings übergibst, die du nicht ändern willst, deklarier sie als const. Wenn du sie ändern musst, und die aufrufende Methode soll's mitkriegen, nimm var. Ansonsten: du hast wahrscheinlich was falsch gemacht und solltest dein Design überdenken

Für einfache Dinge wie Integer oder Byte machts weniger Sinn, auch wenn du Konstanten als Parameter übergeben willst, sehe von var/const ab. Wenn du allerdings viele Floats rumschiebst, kann es unter Umständen einen gewissen Geschwindigkeitsvorteil mit sich bringen - muss aber nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Konstantenparameter

  Alt 23. Sep 2006, 19:09
Bei Parametern vom Typ String, die in der Methode nicht verändert wrden, ja. Zum einem, wegen der Optimierung und zum andrem erhöht es die Lesbarkeit, weil man sofort sieht, dass der Paramater nicht verändert wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Konstantenparameter

  Alt 23. Sep 2006, 19:15
Ich würde mal sagen, dass ein const nie schadet, oder? Also selbst wenn es überflüssig sein sollte, dürfte dies doch nichts verschlechtern.

Unabhängig davon hier auch gleich eine Frage zum gleichen Thema, weiß jmd. ob es nicht eh aut. eine Optimierung durch den Compiler gibt? Ich meine mich zu erinnern, dass z.B. der Java-Compiler einzelne Parameter eh als final übersetzt, wenn diese in einer Methode nicht geschrieben werden. Vielleicht hat ja der Delphi-Compiler hier eine ähnliche Optimierung, so dass auch das Fehlen keine Auswirkungen hat (sehen wir von der Lesbarkeit ab).

Zu dem Thema Lesbarkeit, dann sollte man doch auch noch out erwähnen, ist auch nochmal eindeutig und sinnvoll!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Konstantenparameter

  Alt 24. Sep 2006, 09:23
Zitat von Der_Unwissende:
weiß jmd. ob es nicht eh aut. eine Optimierung durch den Compiler gibt?
Ich weiß es nicht, aber ich nehme an nicht. Denn sonst würde in der Hilfe ja nicht stehen, dass const dem Compiler die Optimierung des Codes ermöglicht (siehe Zitat in meinem ersten Beitrag).
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Konstantenparameter

  Alt 24. Sep 2006, 10:38
Zitat von Der_Unwissende:
weiß jmd. ob es nicht eh aut. eine Optimierung durch den Compiler gibt?
Kann es auch nicht geben da sobald man mit Pointern weiterwerkelt (z.B. übergabe in eine DLL) den Const-Parameter verändert kann auch und damit das Programm durcheinander bringen kann.

const bringt immer eine Geschwindigkeitsoptimierung wenn der eigentliche Parameter mehr als 4 Byte (für Win32) benötigt. Dann wird statt einer kopie deines Parameters (String, Struktur, ...) nur eine Zeiger übergeben. Bei Objekten bringts nichts da ja sowieso nur eine Referenz übergeben wird und diese ist ja ein 4 Byte Zeiger.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Re: Konstantenparameter

  Alt 4. Aug 2011, 15:51
Das Thema interessierte mich so sehr, daß ich mich damit beschäftigte und hier trotz des Alters der Diskussion etwas dazu beitragen möchte:

weiß jmd. ob es nicht eh aut. eine Optimierung durch den Compiler gibt?
Anscheinend ja. Ich probierte es mit einem sehr langen String, der "einfachsten" Datenstruktur, die man sehr groß und damit sehr speicherbeanspruchend werden lassen kann. Solang in der aufgerufenen Prozedur die übergebene Variable nicht per Ergibtanweisung verändert wird, solang wird anscheinend auch kein Abbild der Datenstruktur erzeugt - zumindest läßt diese Folgerung der im Taskmanager angzeigte Speicherbedarf zu. Erst unmittelbar vor der Ergibtanweisung schnellt der Speicherbedarf in die Höhe, was auf ein unmittelbar zuvor erstelltes Duplikat der speicherbeanspruchenden Datenstruktur hindeutet.

Wenn man also die übergebene (in die Routine "hineinfließende") Variable nicht verändert, ist es demnach egal, ob man sie einfach oder mit const gegen Veränderung abgesichert übergibt.

Diese Beobachtung machte ich bereits mit Delphi 2.0 (und 3.0).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: Re: Konstantenparameter

  Alt 4. Aug 2011, 16:04
Wenn man also die übergebene (in die Routine "hineinfließende") Variable nicht verändert, ist es demnach egal, ob man sie einfach oder mit const gegen Veränderung abgesichert übergibt.
Fast.

PS: Es gab vor Kurzem schonmal einen Thread dazu wo wild hin- und herdiskutiert und auch mal was gemessen wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Konstantenparameter

  Alt 4. Aug 2011, 16:11
Das hat einfach was mit der Referenzzählun zu tun. Es ist wie das Kopieren eines Strings. Beim Kopieren wird keine Zeit verloren, da eigentlich keine Kopie erstellt wird, sondern nur der Referenzzähler um eins erhöht wird, was ja recht fix geht.
Wenn man dann aber die Kopie (oder auch das Original) ändert startet Delphi den eigentlichen Kopiervorgang. Und erst jetzt wird es teuer.

Du beschreibst quasi das normal zu erwartende Verhalten, da brauch man auch keine Zeitmessungen etc für.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Konstantenparameter

  Alt 4. Aug 2011, 16:14
@Delphi-Laie:
Es wird schon bei einer einfachen Zuweisung an eine andere Variable der Referenzzähler erhöht, während das bei einem const Parameter nicht passiert. Das kannst du im Assemblerquelltext sofort sehen. Deshalb werden zumindest einige CPU-Zyklen mehr gebraucht.

Mit welchem Quelltext hast du denn getestet?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:12 Uhr.
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