Stack messen
-
Mein selbstgeschriebener Lisp-Interpretierer, erzeugt manchmal einen
Stack-Overflow. Gibt es eine Möglichkeit, die Grösse des belegten Stacks,
abzurufen ? Vielleicht eine API-Funktion. Blöde Frage: Das Betriebssystem, XP,
Win 7, wird bei einem Stack-Overflow, und folgendem Absturz, nicht beschädigt ? Es müsste robust genug sein.
-
Da die Prozesse im eigenen Adressraum laufen, wird das Betriebssystem natürlich nicht beschädigt. Die Größe des Stacks legst du selbst fest in den Linkereinstellungen. Wenn du nichts abgefahrenes in den Funktionen machst, kannst du einfach die maximale Rekursion auf 200 oder so begrenzen.
-
Wenn Du in einer Funktion einen Zeiger auf eine Stackvariable speicherst und später das selbe wieder machst, kannst Du auch die Werte vergleichen.
-
Danke euch zwei !
-
Ein Interpreter muss Rekursion in der interpretierten Sprache übrigens nicht mit Rekursion in C++ umsetzen. Man kann einen Stack auch mit einem
std::vector
oder Ähnlichem modellieren. Da hat man natürlich maximale Kontrolle drüber.