我在运行程序时收到“程序堆栈溢出重置”消息。所以我设置了一个计数器来查看我在程序中递归调用主函数的次数。原来它大约是 30,000 次,而我堆叠的数据是长度约为 10 个元素的列表,我认为这不是很多。我的问题是这种递归调用量和内存使用量是否常见,还是我做错了什么更有可能?我检查了 vista 的资源管理器,发现 lisp.exe 进程的内存只增长了 1MB。以及如何调整CLisp的堆栈溢出限制?
问问题
2112 次
2 回答
2
http://clisp.cons.org/impnotes.html#faq-stack
请注意,如果您进行尾调用并编译您的函数,则根本没有限制。
于 2009-10-25T21:19:50.107 回答
1
1 MB 似乎是 Windows 上的默认堆栈大小。我不知道是否可以在不重新链接程序的情况下更改它,但无论如何我建议将程序转换为尾递归形式并使用 CLisp 字节编译器,这将优化它,或者只是将其转换为迭代形式。虽然许多 Common Lisp 编译器确实实现了尾调用优化,但标准并不要求它,因此不应使用无界递归。
于 2009-10-25T19:38:27.783 回答