Entwickler-Ecke
Sonstiges (Delphi) - Stack-Frames
mars - Di 25.03.03 16:55
Titel: Stack-Frames
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 - Di 25.03.03 17:45
Zitat: |
Gibts irgendwelche Generaltips, um StackOverflows zu vermeiden?
|
Tja, Debuggen und Fehler korrigieren
mars - 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 - Di 25.03.03 18:15
Zu einem Stack-overflow kommt es nun mal, wenn irgendwo ein Fehler versteckt liegt.
Motzi - 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.
mars - 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 - 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...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!