[1884] Re:crowbar_book_ver4について
投稿者:(ぱ)こと管理人
2013/12/02 21:13:12
>たぶんですけど、直すのに影響があんまり出ないやり方があります。crowbarスタックを
>一つの配列ではなく、複数の配列をリンクするによりスタックの拡張ができます。
>スタック拡張する場合には新たな配列をmalloc()して、それをもとにあったスタックと
>リンクして、それでrealloc()を回避できますますね。これが「chunked stack」とも
>言います。
全体を確認していませんが、ざっと見てみると、現状のcrowbarの実装だと
スタック操作がpush_value()とかpeek_stack()にカプセル化されているので、push_value()のところで新たにmalloc()してリンクリスト等で管理し、
peek_stack()にて、もし配列の下端より下の領域を参照されたらひとつ前の
領域から算出して返す、ということはできそうですね……
実のところ同じ現象はDiksamにもあるはずで、こちらはVMの中で直接参照して
います。ただし、Diksamは関数呼び出し時にスタックの拡張があるかどうかを
判定していますし、ひとつの関数の実行中だけ連続したスタック領域が見えれば
十分でしょうから、なんとかなるように思います。
(すみません、ちょっとすぐには直せませんが)
ご意見ありがとうございました。