使用GNU CLisp获取堆栈溢出(Windows)

时间:2009-10-25 18:50:13

标签: stack-overflow common-lisp

我正在运行程序时收到“程序堆栈溢出RESET”消息。所以我设置了一个计数器来查看我在程序中递归调用main函数的次数。事实证明它大约是30,000次,而我正在堆叠的数据是长度大约为10个元素的列表,我认为这些数据并不多。我的问题是这种递归调用和内存使用量是否常见,或者我更有可能做错了什么?我检查了vista的资源管理器,发现内存只增加了1MB用于lisp.exe进程。我如何调整CLisp的堆栈溢出限制?

2 个答案:

答案 0 :(得分:2)

http://clisp.cons.org/impnotes.html#faq-stack

请注意,如果你进行尾调用并编译你的函数,那么就没有任何限制。

答案 1 :(得分:1)

1 MB似乎是Windows上的默认堆栈大小。我不知道是否可以在不重新链接程序的情况下更改它,但无论如何我建议将程序转换为尾递归形式并使用CLisp字节编译器,它将优化它,或者只是将其转换为迭代形式。虽然许多Common Lisp编译器都实现了尾部调用优化,但标准并不需要它,因此不应使用无界递归。