2

プログラムの実行中に「プログラム スタック オーバーフロー リセット」メッセージが表示されます。そこで、プログラムでメイン関数を再帰的に呼び出している回数を確認するためにカウンターを追加しました。約30,000回であり、スタックしているデータは約10要素の長さのリストであり、それほど多くはないと思います。私の質問は、この量の再帰呼び出しとメモリ使用量が一般的かどうか、または何か間違ったことをしている可能性が高いかどうかです。vista のリソース マネージャーを確認したところ、lisp.exe プロセスのメモリが 1MB しか増加していないことがわかりました。また、CLisp のスタック オーバーフロー制限を調整するにはどうすればよいですか?

4

2 に答える 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 に答える