Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Risiko dyn.array als Funktionsrückgabewert ??? (https://www.delphipraxis.net/166988-risiko-dyn-array-als-funktionsrueckgabewert.html)

himitsu 8. Mär 2012 17:28

AW: Risiko dyn.array als Funktionsrückgabewert ???
 
Ich nutze diese gerne mal, als Rückgabewerte, für irgendwelche kleineren Listen, denn hier muß sich keiner um die Speicherfreigabe kümmern.

Nicht umsonst sollte z.B. keine TStringList als Result nutzen, da dort die Sache mit der Freigabe nicht so schön zu klären ist.

Peter1999 8. Mär 2012 21:24

AW: Risiko dyn.array als Funktionsrückgabewert ???
 
@Himitsu
Also ich nutze sie nun eben gerade gern für große Datenmengen, da hier der riesen Overhead der Objekte (TList<Real>, o.Ä.) entfällt und RAM ist zumindest bei mir immer noch kostbar. Aber das ist wohl Geschmacksache.

@uligerhardt
Ich finde immer noch, das Beispiel ist ungeeignet, da alles genau so ist, wie man es auch erwartet. Wenn nil, dann length=0...wenn out, dann geht nix rein, also auch nil--> length=0, wenn das setlength vor dem write steht, stimmt auch die Länge=10 usw...

@Himitsu Teil2 ;)
Du hast natürlich recht, dass man beim Result von Funktionsaufrufen aufpassen muss, ob man selbst sauber initialisiert. Doch da sollte man dann auch eine Compiler-Warnung bekommen, oder nicht? Außerdem ist das ja nicht nur bei DynArrays der Fall sondern generell.


@bernhard_LA
Um mal wieder zum eigentlichen Thema zu kommen. Gibt es denn noch irgendwelche Hinweise (Fehlermeldung, Code-Schnippsel,...)? Sonst ist das hier wahrscheinlich wenig Erfolg versprechend.

Gute Nacht

uligerhardt 9. Mär 2012 07:32

AW: Risiko dyn.array als Funktionsrückgabewert ???
 
Zitat:

Zitat von Peter1999 (Beitrag 1155498)
Ich finde immer noch, das Beispiel ist ungeeignet, da alles genau so ist, wie man es auch erwartet. Wenn nil, dann length=0...wenn out, dann geht nix rein, also auch nil--> length=0, wenn das setlength vor dem write steht, stimmt auch die Länge=10 usw...

Mit dem Beispiel wollte ich zeigen, dass die Rückgabe von compilerverwalteten Typen sich wie eine var-Übergabe vehält, wo doch semantisch gesehen eine out-Übergabe angemessen wäre:
Zitat:

Zitat von http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/parameters_xml.html
With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input.

"output only" und "where to store output" hört sich für mich irgendwie schon nach Rückgabewert an.

bernhard_LA 9. Mär 2012 17:42

AW: Risiko dyn.array als Funktionsrückgabewert ???
 
fehler gefunden : falscher Zugriff aber ne ganze menge code zeilen vor AV --> lange suche :-( .... die jetzt ein Ende hat :-D

himitsu 9. Mär 2012 18:07

AW: Risiko dyn.array als Funktionsrückgabewert ???
 
Gerade bei großen Datenmengen kann der Overhead des TList-Objekte schnell man nicht mehr ins Gewicht fallen.
Denn der reine Verwaltungsoverhead ist garnicht so groß. (nur ein paar wenig Byte)
Das Einzige, was größer auffallen könnte, ist eine Geschwindigkeits- und Speicheroptimierung.

So wird beim .Add nicht nur für das eine Feld Speicher reserviert, sondern gleich für ein paar mehr. Vorteil ist dann, daß bei den nächsten Add keine Speicheranforderungen mehr nötig sind, was das umkopieren des Speichers oftmals erspart.
Außerdem haben Liste auch andere Vorteile, was den größeren Overhead auch relativieren kann. (nette Funktionen, welche man nutzen kann)

Es kommt aber immer auf den Einzelfall an, denn eine TList ist intern auch "nur" ein Array
und je nach Anforderung hat alles mal seine Vor- und Nachteile.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 2 von 2     12   

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