Discussion:
wieviel Variablen?
(zu alt für eine Antwort)
Jens Kallup
2014-05-21 17:29:05 UTC
Permalink
Hallo Gemeinde,

zur Zeit mache ich mir überlegungen über den Stack,
auf dem ja Variablen abgespeichert werden können.
In einzelnen Funktionen/Prozeduren ist es kein
Problem, da kann ich dank 2 Pass Compiler die Anzahl
überprüfen und entsprechend den Stack setzen.

Was aber, wenn ich eine Sprache Compilieren will, die
schwammig ist, kann man machen, um die Stackgröße zu
ermitteln, wenn die Variablen pro Modul unterschiedlich
ist?

Mache ich den Stack zu klein - crash, mache ich ihn
zu groß - ebenfalls crash :/

wie kann man nun den Stack Exception per ASM ähnlich
wie bei C++ try catch dazu zu bewegen, wenn dieser
zu klein ist, zu vergrößern?

Gruß
Jens
Stefan Reuther
2014-05-22 18:22:47 UTC
Permalink
Post by Jens Kallup
wie kann man nun den Stack Exception per ASM ähnlich
wie bei C++ try catch dazu zu bewegen, wenn dieser
zu klein ist, zu vergrößern?
Das kommt ja nun heftigst auf die Umgebung an.

Aktuelle Betriebssysteme allokieren einfach eine große Menge Adressraum
für den Stack, hinterlegen aber keinen Speicher. Wenn der Stack über-
läuft, gibt's einen Page Fault, dann wird entsprechend Speicher einge-
blendet, fertig.

Im DOS Real-Mode war es gängig, in den Prozedurvorspann einen Aufruf an
eine Bibliotheksfunktion zu kodieren, die den Stackrahmen anlegt und
dabei prüft, ob genug Stack verfügbar ist. Mehr als geordnet das
Programm beenden kann man da aber auch nicht, denn wenn der Stack alle
ist, müsste man, um ihn zu vergrößern, höchstwahrscheinlich Adressen
umschreiben, und hat verloren, wenn jemand die Adresse einer
Stackvariablen irgendwo gespeichert hat.


Stefan
Bonita Montero
2014-05-22 23:41:10 UTC
Permalink
Post by Jens Kallup
wie kann man nun den Stack Exception per ASM ähnlich
wie bei C++ try catch dazu zu bewegen, wenn dieser
zu klein ist, zu vergrößern?
Unter Windows kannst Du per __try / __except Stack
-Overflows abfangen. GetExceptionCode() gibt dann
EXCEPTION_STACK_OVERFLOW zurück.
--
http://facebook.com/bonita.montero
Loading...