Stapel-/Stacküberlauf

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Stapel-/Stacküberlauf

Beitrag von Danilo »

7x7 hat geschrieben:
Danilo hat geschrieben:Wie viele rekursive Durchläufe macht Deine Prozedur?
Keine Ahnung...mit den momentanen Parametern wahrscheinlich einige Milliarden.
Bei "einige Milliarden" bist Du ja im Bereich von "einige GigaByte",
also wird es wohl wieder crashen, wenn der Stack aufgebraucht ist -
nur diesmal halt etwas später.

Bei 1 GB Stack (1.073.741.824 Bytes) kannst Du
ohne lokale Variablen und ohne Funktionsargumente
auf 32bit maximal 268.435.456 Aufrufe machen,
also 1/4 Milliarde.
(1GB Stack / 4 Bytes Rücksprungadresse = 268.435.456 Aufrufe)

Mehrere Milliarden rekursive Aufrufe gehen auf 32bit imho nicht.
Mit einem theoretischen Stack von 3GB (mit XP 3GB switch)
wären nur mit Rücksprungadresse maximal 805 Millionen Aufrufe
möglich - durch lokale Variablen und Funktionsargumente noch
viel weniger.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Stapel-/Stacküberlauf

Beitrag von 7x7 »

Danilo hat geschrieben:(1GB Stack / 4 Bytes Rücksprungadresse = 268.435.456 Aufrufe)
Ja, da hast du Recht. Habe das Programm gestoppt, den Stack auf 2GB erhöht und nochmal neu gestartet. 1 Stunde Verlust...was ist das schon, kann sowieso etwas länger dauern.

Kann nur hoffen, dass ich mich mit "einigen Milliarden" getäuscht habe. Wenn ich mir so die Zwischenergebnisse meiner Berechnungen ansehe, bin ich aber wohl eher vor dem Rechner eingetrocknet bevor der Stack wieder überläuft. Mal sehen, vielleicht lässt sich noch was optimieren.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Antworten