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)
2
A
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.
2
http://clisp.cons.org/impnotes.html#faq-stack
Notez que si vous faites des appels de la queue et compilez votre fonction (s) il n'y aura pas de limite du tout.
Questions connexes
- 1. commandes shell en cours d'exécution avec gnu clisp
- 2. Recherche d'exceptions de dépassement de pile dans un service Windows
- 3. (SHLWAPI.DLL): 0xC00000FD: dépassement de pile
- 4. Eclipse - erreurs de dépassement de pile
- 5. Dépassement de pile dans Internet Explorer
- 6. Dépassement de pile sur IIS 6.0
- 7. Dépassement de pile dans IE avec JQuery (ligne 12/1076)
- 8. Comment compiler Clisp 2.46?
- 9. Dépassement de tampon de pile (Windows, C++): comment détecter le coupable?
- 10. Dépassement de pile SAS: dictionnaire de lecture du dictionnaire PROC.colonnes
- 11. Pourquoi une exception de dépassement de pile est-elle générée?
- 12. glPushName + glPopName débordement et sous-dépassement de pile
- 13. Quelles sont les causes possibles d'un dépassement de pile?
- 14. Dépassement de pile - mémoire statique ou mémoire dynamique
- 15. "Dépassement de pile à la ligne: 0" sur Internet Explorer
- 16. La pile .NET vs pile de Windows
- 17. Implémentation d'une trace de pile sous Windows
- 18. Port Windows/implémentation pour GNU Pth (Gnu Portable Threads)
- 19. Vulnérabilité avec cryptage des informations de cookie pour l'authentification (podcast de dépassement de pile)
- 20. Apache + mod_lisp + clisp
- 21. Dépassement de pile lors du remplacement de 'avec' 'dans VB 6.0
- 22. Dépassement de pile après 15 récursions avec la fonction de classe Javascript
- 23. Dépassement de pile lors de l'ouverture du menu avec ApplicationCommands en C#
- 24. Numéro de format comme Dépassement de pile (arrondi à des milliers avec le suffixe K)
- 25. Dépassement de pile de la DLL native appelée à partir de l'application gérée
- 26. Dépassement CSS avec URL longue
- 27. strtok - dépassement de mémoire tampon
- 28. Exception de dépassement de pile (0xC00000FD) à la fonction de sélection winsock
- 29. Exception de dépassement de pile dans le projet web de compojure
- 30. Assemblage de Windows tas et pile?