Einzelnen Beitrag anzeigen

Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#9

Re: Wie baut man sowas wie writeln/sprintf selbst ?

  Alt 25. Dez 2008, 16:53
Also ich hab auch mal ein bischen rumprobiert und ein (sinnloses) Beispiel gebastelt. Allerdings bietet die Methode in meinen Augen grade für mich mehr Nachteile als überladen:

1. Man kann keine normalen Arrays mehr übergeben, mag sein dass man das hinbiegen kann, indem man erst irgendwie nach array of TVarRec umwandelt.

2. Der Compiler genieriert beim Aufruf intern erstmal ein array of TVarRec, das verusacht wahrscheinlich grade bei großen Arrays erstmal relativ viel Aufwand, außerdem wird für jedes Element der Typ mitgespeichert (was wenn mans kombinieren möchte natürlich nötig ist), so dass die Größe jedes Elements damit auf 8 Byte anwächst (da das ganze außerdem intern ne Union ist).

3. Wenn ich den Link, den ich gepostet hab, richtig versteh, ist der Zugriff über die Pointer in dem TVarRec zur Modifikation der Orginaldaten (also by reference) problematisch und man muss die Daten erst kopieren, weil die Daten, auf die man zugreift, nach dem Funktionsaufruf nicht mehr existieren, da sie nur temporär erzeugt und auf den Stack gelegt werden. Eine Möglichkeit scheint hier zu sein in der Funktion Heap-Speicher zu reservieren und einen Zeiger darauf zurückzugeben, das verursacht aber auch wieder Aufwand.

Sieht also, da ichs für verschiedene Sortierfunktionen (die natürlich schnell sein sollen) brauch, für mich spontan nicht so geeignet aus, ich werd also entweder auf procedure SortierWas(Data: Pointer; Count: Integer; ElementSize: Integer) umsteigen müssen, was aber den Zugriff auf einzelne Elemente recht schwer macht (man müsste die Size abfragen und je nachdem den entsprechenden Pointer casten und dereferenzieren, um die Werte vergleichen zu können, damit verliert man aber Zeit, wenn es um große Arrays geht und braucht immer noch getrennte Funktionen für signed und unsigned), oder ich bleib einfach dabei alles zu überladen, was ich wohl mach. (Sorry, das war ein wenig Offtopic, ich weiß)
Angehängte Dateien
Dateityp: dpr arrayofconst_148.dpr (1,5 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat