AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Risiko dyn.array als Funktionsrückgabewert ???

Ein Thema von bernhard_LA · begonnen am 8. Mär 2012 · letzter Beitrag vom 9. Mär 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

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

  Alt 8. Mär 2012, 18:28
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#12

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

  Alt 8. Mär 2012, 22:24
@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
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#13

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

  Alt 9. Mär 2012, 08:32
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 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.
Uli Gerhardt
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 9. Mär 2012, 18:42
fehler gefunden : falscher Zugriff aber ne ganze menge code zeilen vor AV --> lange suche .... die jetzt ein Ende hat
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 9. Mär 2012, 19:07
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Mär 2012 um 19:11 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:17 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