Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Konstante Übergabevariablen bei Prozeduren/Funktionen

  Alt 26. Jul 2011, 11:46
Ein String, dynamische Arrays und Interfaces haben eine Referenzzählung, da werden nur Referenzen hoch-/runtergezählt.
Da kann sich ein CONST eventuell lohnen, aber im allgemeinen ist soein kleines IF+INC+DEC recht flott, as daß man es oftmals überhaupt merkt.
Deßhalb laß ich dieses CONST auch bei Strings und dyn. Arrays oftmals weg, da so die Funktionsdeklaration (für mich) dann übersichtlicher wird, da kürzer und man nicht durch dieses hervorgehobene CONST abgelenkt wird.

Aber beim ShortString, Records und statischen Arrays sieht das schnell mal ganz anders aus.

Ein Integer ist hier quasi ein Sonderfall, denn der ist kleingenug, um in ein CPU-Register zu passen, darum macht dort CONST oder nicht keinen Unterschied.
Nur bei VAR wird dort ja eine Referenz übergeben und nicht der Wert.
Auch ein Int64 wird eventuell, mit der Standardaufrufkonvention, hier genauso behandelt, da dort der Wert in zwei Register paßt, also wenn dieses der erste Parameter ist (EAX+EDX ist ja eine allgemein übliche Kombination)


Also gehen wir mal auf größere Typen los, wie z.B. ein array[0..10000000] :
{nix} - eine Kopie des Arrays wird angelegt (das Kopieren und eventuell späteres Freigeben kann schonmal etwas dauern)
CONST - eine Referenz (Zeiger) auf das Array wird übergeben und, für den Compiler, als schreibgeschützt markiert
VAR - eine Referenz auf das Array wird übergeben
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Jul 2011 um 11:52 Uhr)
  Mit Zitat antworten Zitat