2009-10-25 4 views
2

Je reçois le message "Program stack overflow RESET" lors de l'exécution de mon programme. J'ai donc ajouté un compteur pour voir combien de fois j'appelle récursivement la fonction principale de mon programme. Il s'avère que c'est environ 30 000 fois et que les données que je suis en train d'empiler sont des listes de longueur d'environ 10 éléments, ce qui je pense ne sont pas si nombreux. Ma question est de savoir si cette quantité d'appels récursifs et d'utilisation de la mémoire est commune ou non, ou est-il plus probable que je fasse quelque chose de mal? J'ai vérifié le gestionnaire de ressources de Vista et a constaté que la mémoire a augmenté seulement pour 1MB pour le processus lisp.exe. Et comment puis-je ajuster la limite de débordement de pile de CLisp?Dépassement de pile avec GNU CLisp (Windows)

Répondre

1

1 Mo semble être la taille de la pile par défaut sous Windows. Je ne sais pas s'il est possible de le changer sans relier le programme, mais dans tous les cas je recommanderais soit de convertir le programme en forme récursive en queue et en utilisant le compilateur d'octets CLisp, ce qui l'optimisera, soit le convertira simplement en forme itérative. Alors que de nombreux compilateurs Common Lisp implémentent l'optimisation des appels de queue, la norme ne l'exige pas, de sorte qu'une récursivité illimitée ne doit pas être utilisée.

Questions connexes