Entwickler-Ecke
Sonstiges (Delphi) - MaxStacksize
JeanvanHees - Do 26.09.02 15:40
Titel: MaxStacksize
:wink2: tag
Wie erhöhe ich das?
Ich krieg nämlich stack overflow.
Gruße,
Jean
Klabautermann - Do 26.09.02 16:20
Hallo,
gucke mal in der Online-Hilfe unter
Delphi-Compiler-Direktiven (Liste).
Für dich ist dann glaube ich dieser zuständig:
| DELPHI Online-Hilfe hat folgendes geschrieben: |
Speicherreservierung
Typ Parameter
Syntax {$M Mindestgröße,Maximalgröße}
{$MINSTACKSIZE Zahl}
{$MAXSTACKSIZE Zahl}
Vorgabe (Kontrollfeld) {$M 16384.1048576}
Bereich Gesamter Text
Anmerkungen
Die Direktiven $MINSTACKSIZE und $MAXSTACKSIZE werden nur in Windows verwendet. Informationen zur Direktive $M (
$RESOURCERESERVE) in Linux finden Sie unter Reservierter Adressraum für Ressourcen.
Die Direktive $M bestimmt den Umfang der Stack-Reservierung für eine Anwendung. minstacksize muß ein Integer-Wert zwischen 1024 und 2147483647 sein. Er definiert die Mindestgröße für den Stack der Anwendung. maxstacksize muß ein Integer-Wert sein, der zwischen minstacksize und 2147483647 liegt. Er definiert die maximale Stack-Größe der Anwendung
Steht für minstacksize einer Anwendung nicht genügend Speicher zur Verfügung, gibt Windows beim Versuch, die Anwendung zu starten, eine Fehlermeldung aus.
Der Stack einer Anwendung darf nicht größer werden als maxstacksize. Jeder Versuch, den Stack über maxstacksize hinaus zu vergrößern, führt zu einem EstackOverflow-Ausnahmefehler.
Die Direktiven $MINSTACKSIZE und $MAXSTACKSIZE ermöglichen die separate Angabe der Mindest- und Maximalgröße für den Stack.
Diese Direktiven zur Speicherbelegung sind nur in einem Programm sinnvoll. Sie sollte nicht in einer Bibliothek, Unit oder einem Package verwendet werden.
Zur Sicherstellung der Portabilität zwischen Windows und Linux sollten Sie immer die Langformen dieser Direktiven benutzen (und nicht $M).
Hinweis Die Direktive $M wird in anderen Betriebssystemen als Windows für unterschiedliche Zwecke verwendet. Reservierter Adressraum für Ressourcen |
Gruß
Klabautermann
Motzi - Do 26.09.02 17:58
Ich würd die Stackgröße nicht hinaufsetzen! Die Standard Stackgröße beträgt 1MB und das sollte vollkommen reichen! Ich glaube viel eher, dass der Stackoverflow aufgrund eines Programmfehlers auftritt! Stichwort - Rekursion
Visum - Do 26.09.02 19:44
Hi,
das muss nicht unbedingt ein Programmierfehler sein. Ich hab das gleiche Problem gehabt und hatte keinen Fehler im Programm (hab zumindest keine gefunden und das Prog läuft auch).
Ich hab den Stack hochgesetzt, mit dem Ergebniss, dass mein Rechner eine halbe Stunde später abgestürzt ist, bzw. den Fehler gebracht hat.
Rechne am besten mal aus, wieviel Daten du in den Stack schreiben willst. Liegt das über 2GB (also die maximale Stacksize) geht es eh nicht, dann wirst du wohl oder übel gezwungen sein einen iterativen Weg zu suchen.
Visum
JeanvanHees - Fr 27.09.02 08:50
Ok, danke.
Ich denk dann das ich mein programm mal umkramen muß. :(
Motzi - Fr 27.09.02 09:31
"Ich hab den Stack hochgesetzt, mit dem Ergebniss, dass mein Rechner eine halbe Stunde später abgestürzt ist, bzw. den Fehler gebracht hat."
Das sollte wohl doch ein deutliches Zeichen sein, dass du einen Bug in deinem Programm hast!
"Rechne am besten mal aus, wieviel Daten du in den Stack schreiben willst. Liegt das über 2GB (also die maximale Stacksize) geht es eh nicht, dann wirst du wohl oder übel gezwungen sein einen iterativen Weg zu suchen. "
Was heißt liegt das über 2GB? 2GB ist die Größe des Adressraumes! Der Stack sollte nichtmal annähernd so groß sein! Wie bereits gesagt.. die Standardgröße des Stacks ist 1MB und das sollte eigentlich vollkommen reichen! Wenn man auch ohne eine falsch konstruierte Rekursion einen Stackoverflow erzeugt sollte man sich mal Gedanken über seine Speicherverwaltung machen! Es ist nur in den seltensten Fällen erforderlich die Stackgröße von 1MB zu erhöhen!
Visum - Fr 27.09.02 12:34
Jo, ich wollte damit auch zum Ausdruck bringen, dass es (meist) sinnlos ist den Stack zu erhöhen.
Mein Programm hat keinen Bug! (sag ich einfach so) Es war nur uneffizient aufgebaut, da es bis zu 1 Mrd. mal ein zweidimensionales Array in den Stack schreiben wollte, was dann halt nicht passte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!