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
Der_Unwissende

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

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
Delphi-Laie

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

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
Online

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

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

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.910 Beiträge
 
Delphi 12 Athens
 
#5

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
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Re: Konstantenparameter

  Alt 4. Aug 2011, 16:21
Anscheinend ja. Ich probierte es mit einem sehr langen String, ...
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.
Const beschleunigt die Sache auch bei Strings da hier keine Referenzzähler-erhöhung vor dem Sprung in die Funktion erfolgt bzw. keine Referenzzähler-Dekremierung beim Sprung aus der Funktion. Wirkt sich ziemlich auc wenn sehr oft die Funktion aufgerufen wird.

Aber Achtung! Bei älteren Delphi-Versionen gibts einen Bug wenn man sowas mit WideStings macht und die Funktion mit einer Membervariablen aufruft die in der Funktion gesetzt wird. Hier zerschießen sich älter Versionen (z.B. D6) den Speicher. Ist XE ist das auf jedenfall gefixt.
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, 17:02
Vielen Dank Euch Antwortern!

Es ist also nicht nur eine Frage des Speicherabbildes der Datenstruktur und damit des Speicherverbrauches, sondern auch der Geschwindigkeit. Gibt es also in etlichen Programmen diesbezüglich doch noch etwas zu optimieren.

Foren sind hervorragend und jedem papierenem und damit geduldigem Buch haushoch überlegen.

Geändert von Delphi-Laie ( 4. Aug 2011 um 17:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.910 Beiträge
 
Delphi 12 Athens
 
#8

AW: Konstantenparameter

  Alt 4. Aug 2011, 17:36
Es kommt auch durchaus immer wieder vor, dass mehr Arbeitsspeicher das Programm deutlich schneller machen würde. Nur kann man dem Benutzer den ja nicht einfach vollmachen. Deshalb muss man dann eine ausgewogene Lösung suchen.

Nur auf einzelne Werte zu schauen, reicht daher nicht immer. Zudem kann man meistens mit einem besseren Algorithmus viel mehr rausholen als mit Sprachoptimierungen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: Konstantenparameter

  Alt 4. Aug 2011, 22:23
Der beste Artikel zu diesem Thema, den ich kenne.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


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:20 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-2025 by Thomas Breitkreuz