スタックオーバーフローの話 - Scheme VM を書く

昨日スタックオーバーフローのチェックの話を書いたところ、ささださんと shiro さんから「PUSH 時ではなくて CALL 時にチェックすれば良いのではないか?」と教えていただきました。
つまり

  • コンパイル時にそれぞれの call が最大で消費するスタックの量を記録する
  • それを call 時に残りスタック量と照らし合わせる

というもの。(applyのときは動的にやらないといけない)
CALL の呼ばれる頻度は PUSH のそれと比べて数分の一 なので効果が期待出来るというわけです。


確かにその通りだと思うので実装したいのですが手間がかかりそうなのでもう少し他の最適化を試してからやりたいと思います。