Autor Beitrag
JeanvanHees
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: Do 26.09.02 15:40 
:wink2: tag
Wie erhöhe ich das?
Ich krieg nämlich stack overflow.
Gruße,
Jean

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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

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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: Fr 27.09.02 08:50 
Ok, danke.
Ich denk dann das ich mein programm mal umkramen muß. :(

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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!

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



BeitragVerfasst: 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.