Autor Beitrag
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Di 25.03.03 16:55 
Mein Prog bleibt auf Grund einer ziemlich hohen Rekursionstiefe (tönt komisch: hohe Tiefe :wink: ) mit einem Stack-Overflow-Fehler hängen. Ich hab dann mal an den Einstellungen rumgespielt (Kann man den Stack eigentlich ohne Restriktionen vergrössern?) und bei den Projektoptionen die Einstellung Stack-Frames gefunden. Die Hilfe sagt mir dazu nicht sehr viel. Eingeschaltet hat sich folgendes Phänomen eingestellt: Die Anwendung lief, nutzte immer mehr Speicher und kurz vor dem StackOverflow ging die Speichernutzung wieder auf die Initial-StackSize von 16Mb runter; das Spielchen begann dann von neuem, die Speichernutzung stieg wieder und plötzlich gabs dann trotzdem einen StackOverflow. Dies bei einem Wert von 22 Mb (keine Ahnung wieso gerade dort).
Meine Frage nun: Was hat es mit dieser Stack-Frames-Einstellung auf sich?
Gibts irgendwelche Generaltips, um StackOverflows zu vermeiden?

DiV
Teutobod
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 55



BeitragVerfasst: Di 25.03.03 17:45 
Zitat:
Gibts irgendwelche Generaltips, um StackOverflows zu vermeiden?



Tja, Debuggen und Fehler korrigieren
mars Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Di 25.03.03 18:09 
Teutobod hat folgendes geschrieben:
Zitat:
Gibts irgendwelche Generaltips, um StackOverflows zu vermeiden?



Tja, Debuggen und Fehler korrigieren


Na gut, danke für diesen wertvollen Tipp... :roll:
Das verstehe ich nicht unter einem Tipp bezogen auf Stack-Overflows.
Teutobod
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 55



BeitragVerfasst: Di 25.03.03 18:15 
Zu einem Stack-overflow kommt es nun mal, wenn irgendwo ein Fehler versteckt liegt.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 25.03.03 18:59 
Teutobod hat folgendes geschrieben:
Zu einem Stack-overflow kommt es nun mal, wenn irgendwo ein Fehler versteckt liegt.

Meistens ist das der Grund, das ist schon richtig, aber es kann auch passieren wenn eine Rekursion eine sehr große Tiefe hat (so wie mars ja schon am anfang geschrieben hat). Im Normalfall sollte allerdings der Standardstack bei weitem ausreichen!

Ich würde dir auch raten zuerst einmal deinen Code auf Fehler zu checken und erst im äußersten Notfall die Stackgröße zu verändern.

Die Stackframes geben die die Speichergrenzen für den Stack an. An diesen Grenzen sind so genannte Page-Guards (Pages im Speicher mit dem PAGE_GUARD Attribut). Anfangs wird nur der benötigte Speicher im Stack reserviert. Wird mehr Speicher benötigt, so wird der Stack vergrößert. Wird der Stack immer weiter vergrößert, so stoßt man irgendwann auf den Page-Guard und wenn das passiert wird ein Stack-Overflow ausgelöst.

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
mars Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Di 25.03.03 19:39 
@Motzi: Fehler gibt es (IMO) keine, bei "einfacheren" Aufgaben (dh, wenn die Rekursionstiefe nicht zu gross wird), funktioniert es einwandfrei. Es ist aber nun mal so, dass die Prozedur, welche rekursiv aufgerufen wird, jedes Mal um die 100 Bytes braucht und sich dies summiert und summiert und ...
Zur ursprünglichen Frage aber:
Zitat:
Die Stackframes geben die die Speichergrenzen für den Stack an.

Aber ich kann ja nirgends die Grösse einstellen, sondern nur "Ja" oder "Nein" wählen?! Heisst "Stackframes-enabled", dass nicht der geamte Stack von Anfang an reserviert wird, sondern nur allmählich?

Ihr seht, ich habe da noch gewisse Verständnisprobleme... :(
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 25.03.03 20:24 
Sorry, das mit den Stack-Frames hab ich falsch vestanden.. hab gesehn, dass du die Option in den Compiler-Einstellungen gemeint hast. Was es mit dem auf sich hat weiß ich auch nicht ganze genau. Aber auf der Seite mit den Linker-Einstellungen kannst du die max. Größe des Stacks festlegen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!