AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Geeignete Variablenübergabe Const oder nicht Const ?
Thema durchsuchen
Ansicht
Themen-Optionen

Geeignete Variablenübergabe Const oder nicht Const ?

Ein Thema von Sourcemaker · begonnen am 26. Sep 2003 · letzter Beitrag vom 26. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#1

Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:02
Hallo,

ich hatte bisher versucht bei allen Prozeduren/Funktionen die Variablen,
wenn nicht "var" sinnvoll war, als "const" zu übergeben.
Nun haben mich meine Kollegen darauf aufmerksam gemacht das es nur bei Strings, Variant, Records, Arrays also komplexen Daten sinnvoll ist.
Bei allen anderen Zahlen, Datum, Logisch wäre die Ablaufgeschwindigkeit langsamer (wenn ich es richtig verstanden habe ein Takt mehr).

Außerdem sollte man möglichst auf Bytes als Typ verzichten da es weder Speicher spart noch schneller ist im Gegenteil auch hier ist es langsamer da alles auf Integer ausgerichtet ist.

Bin gespannt welche Meinungen es dazu gibt.

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:08
Um es etwas zu präzisieren:
Was macht const?
Wo ist der Vorteil?
Und wann setzt man es ein?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:17
Wenn du wirklich auch noch das letzte Quentchen an Tempo rausquetschen willst schau dir mal die unterschiedlichen Prozedur/Funktionsaufrufe mit unterschiedlichen Parameterübergaben im CPU-Fenster an.. da siehst du dann ganz genau wie der Compiler deinen Code umgesetzt hat und was effizienter ist. Generell wird bei const-Parametern ähnlich wie bei var-Parametern, eigentlich immer nur ein Pointer übergeben. Ich hab jedoch die Beobachtung gemacht, dass bei einem Record ebenfalls immer (egal ob var, const oder normal) nur ein Pointer übergeben wird, und nur wenn der Record in der Prozedur geändert wird wird eine lokale Kopie des Records am Stack angelegt...
Strings sind sowieso auch immer nur Pointer (zumindest die LongStrings) und werden daher auch immer nur als solche übergeben...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:23
Hallo Luckie,

ist die Frage ernst gemeint ?
Wie auch immer so verstehe ich Const:
Bei "Const" wird nur die Adresse einer Variable übergeben ebenso bei "Var" nur das man nicht wie bei "Var" den Inhalt der Variable verändern kann. Oftmals will ich Quellvariable nicht verändern dann also
"Const".
Der eingentliche Vorteil dieser beiden Übergabemöglichkeiten ist die höhere Geschwindigkeit bei großen Strings etc. es wird nur die Adresse und nicht die Daten übergeben.

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:25
Ich denk mal, const ist dann schneller, wenn die Größe des Parameters größer als 32Bit ist. Also vor allem bei Records.
Das Phänomen mit den Records, das Motzi beschrieben hat, lässt womöglich auf Delphis Codeoptimierung zurückführen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:32
Zitat von Sourcemaker:
Hallo Luckie,

ist die Frage ernst gemeint ?
Warum soll sie nicht ernst gemeint sein?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:39
Moin Frank,

auch wenn es nicht ganz auf das hinausgeht, was Du meinst:
Wenn ich mir API Funktionen deklariere, verwende ich, im Gegensatz zu Borland, oder den JEDIs, immer const Parameter, da diese den Gegebenheiten in C eher entsprechen, und man somit auch Codesamples leichter nach Delphi übersetzen kann.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:41
Const hat die Bedeutung das der uebergebene Parameter in der Funktion nicht aendern kann.
Entsprechend ist eine Zuweisung in der Funkton auch nicht moeglich.
Dem Compiler erlaubt dies weitergehende Optimierungen.
Zusatzlich nutzt Delphi die read-only Eigenschaft um bei allen Parametern mit mehr als 4 Bytes
diesen mit call-by-reference zu uebergeben. Es wird also nur der Zeiger auf die Variable statt
der ganzen Variablen auf den Stack gelegt. Konsequenterwise ist jeder Zugriff in der Funktion
nun mit einer Dereferenzierung verbunden. Ueblicherweise kommt dabei doch ein Nettogewinn
an Geschwindigkeit heraus, besondrs wenn die Variable viele Bytes hat.
Das ist der gleiche Mechanismus wie bei var, aber da darf und will man auch schreibend zugreifen.
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:48
Hallo Luckie,

war nicht böse gemeint habe mich nur gewundert das bei deinen Status
(Anzahl der Beiträge, Moderator) nach dieser Grundlage gefragt wurde.
Oder wollest Du keine Erklärung sondern ich meine Frage besser formulieren ?

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Geeignete Variablenübergabe Const oder nicht Const ?

  Alt 26. Sep 2003, 12:49
@Christian, const an Objekten als Parameter von Events kann Probleme bescheren wenn man eine Delphi-Komponente in BCB installiert.
Der Compiler faengt an zu meckern. Ich habe gerade an meiner HID-Komponente deshalb ein paar const's abmontiert.
In C impliziert const kein call-by-reference, da C call-by-reference nicht kennt.
Bei Zeigern in C ist auch eine feinere const-Anwendung moeglich als in Delphi.
"const char *p", "char const *p" und "const char const *p". Mal kann man nun den Zeiger nicht veraendern oder nicht die Daten auf die der Zeiger zeigt oder weder das eine noch das andere.
  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 15:45 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