Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stack Overflow trotz iterativen Algorithmus (https://www.delphipraxis.net/7881-stack-overflow-trotz-iterativen-algorithmus.html)

Christian Seehase 23. Aug 2003 20:43

Re: Stack Overflow trotz iterativen Algorithmus
 
Moin Assarbad,

Zitat:

Zitat von Assarbad
Je nach Rekursionstiefe wird also die Menge und größe der lokalen Variablen (und natürlich auch der allozierten Heapbereiche auf den Speicherbedarf Einfuß nehmen.

ähhh... eine iterative Routine hat doch aber keine Rekursionstiefe, alldieweil sie ja eben nicht rekursiv ist. ;-)

Assarbad 23. Aug 2003 20:45

Re: Stack Overflow trotz iterativen Algorithmus
 
:oops: ... :lol:

Mein Fehler, sorry.

Chewie 23. Aug 2003 20:52

Re: Stack Overflow trotz iterativen Algorithmus
 
Zitat:

Zitat von Assarbad
Für jede neue "Instanz" einer iterativen Routine werden die lokalen Variablen neu auf dem Stack plaziert (denn jede hat ja ihre privaten lokalen Variablen).

Der Titel sollte also eher heißen: "Stack Overflow wegen iterativem Algorithmus" ... denn das ist eine allgemeine Gefahr bei Iterationen!

Damit hat sich dann auch erledigt, oder :wink:

Assarbad 23. Aug 2003 21:19

Re: Stack Overflow trotz iterativen Algorithmus
 
Jupp ... ich ersetze gleich Iteration duch Rekursion ... war wie gesagt mein Fehler. Hätte mir ja nur den Code näher anschauen müssen ... irgendwie war bei mir noch so im Hinterkopf, es ginge um Dateisuche :-/

stoxx 24. Aug 2003 13:25

Re: Stack Overflow trotz iterativen Algorithmus
 
Hallo zusammen,

also es war nach meiner Änderung im Quelltext doch nicht behoben.
Es lag letztendlich daran, dass ich die search Methode einfach so deklariert habe.
Jetzt habe ich sie als Methode vom Object declariert, und der Stackoverflow kommt nicht mehr.
Jetzt kommt aber eine neue Exceptionn, dass ich zu wenig Arbeitsspeicher hätte.
Das ist aber Quark !

Denn wenn ich folgende Funktion starte, wird meine Exe 399 MB groß !!
ohne Probleme.
Aber bei meiner Berechnung nur 52 MB .. trotzdem kommt diese dämliche Fehlermeldung ?
Weiss nicht mehr weiter ...

Delphi-Quellcode:
procedure TForm5.Button58Click(Sender: TObject);
var ar : array of integer;
   i : longint;
begin

i := 100000000;
setlength(ar,i);

for i := 0 to length(ar) -1 do ar[i] := 5;
showmessage('warte');
end;

Assarbad 24. Aug 2003 15:06

Re: Stack Overflow trotz iterativen Algorithmus
 
sizeof(Integer) = 4
4 * 100000000 ~~ 400MB

Außerdem würde man das nie so machen, sondern immer den Speicher direkt DWORD-weise überschreiben ... Zumindest wird deine Variante sehr langsam.

Vielleicht sagst du einfach nochmal, was du eigentlich vorhast. Hier sollte man wohl stärker optimieren :-/

stoxx 24. Aug 2003 15:31

Re: Stack Overflow trotz iterativen Algorithmus
 
Zitat:

Zitat von Assarbad
sizeof(Integer) = 4
4 * 100000000 ~~ 400MB

Außerdem würde man das nie so machen, sondern immer den Speicher direkt DWORD-weise überschreiben ... Zumindest wird deine Variante sehr langsam.

Vielleicht sagst du einfach nochmal, was du eigentlich vorhast. Hier sollte man wohl stärker optimieren :-/

Hi .. dieses Array mit 100000000 Elementen war ja nur zum testen, ob es an der Größe des Arrays liegt und mein Speicher zu klei ist, und ob ein array am ende einer Procedure wieder automatisch freigegeben wird, ohne setlength(ar,0) zu setzen. Das wird gemacht


Wie meinst Du das mit DWORD Weise ?

Ich bekomm die Fehlermeldung nicht weg ..
es tritt immer die Fehlermeldung auf, dass ich zu wenig Arbeitsspeicher hätte .. versteh das nicht

stoxx 24. Aug 2003 16:29

Re: Stack Overflow trotz iterativen Algorithmus
 
Hi,


habt vielen Dank für Eure Hilfe, das Problem hat sich jetzt erledigt,
hab von arrays auf TList umgestellt.
Da funktioniert das wunderbar und geht auch viel viel schneller .. und die Daten sind auch viel viel kleiner alles.
(wenn man in Tlist list.insert(i) benutzt und somit nur pointer umkopiert, geht das schneller als wenn man grosse Datenstrukturen in einem Array umkopieren muss)
Irgendwie muss Delphi arrays mehrfach anlegen (bei procedure Übergaben oder was weiss ich)

ist jedenfalls irgendwie nicht normal ...
aber egal ..


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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