作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] 关於 max recursion depth = 1024
时间Sat Apr 11 00:08:01 2009
※ 引述《goodword (佳话)》之铭言:
: 如题
: 若 file1 内有一行恰好就叫做 do file1
: 那麽 mcalc> do file1 便应该会使程式陷入无穷回圈
: 所以老师要我们限制 max recursion depth = 1024
: 可是我拿 modCalc.ref 测试的结果仍是会 程式记忆体区段错误 crash了
: 当然我也是有限制 recursion depth = 1024 但也是 程式记忆体区段错误
: 所以我检查过後发现 _dofileStack.size() 等於511时便已经crash了
: 所以我把 recursion depth 改小一些 (我改成限制在500)
: 结果程式便真的停在 _dofileStack.size() 等於500的时候
: 然後我用 exit(1); 结束程式 ←这儿是这样做吗 还是还要pop出所存的指令??
: 而我想1024不行的原因会不会是 ccws* 的记忆体不大?
: 不够放这麽多 _dofileStack?
: 很多问题 麻烦老师了
: 谢谢老师
这其实是 ref program 的一个 bug...
原因是出在 MAX_HISTORY 被定义成 1024,
所以当 recursive 呼叫时会使得 _historySize > 1024 所以会 crash...
这个目前没有简单的 fix, 除非我们的 _history[] 可以 wrap-around...
不过有一个简单的 work around, 就是将 MAX_HISTORY 设大一点, 比方说 65536,
那麽只要 dofile1 的内容不要太多, 加起来不要超过 65536 个指令,
应该就不会 crash...
先这样, 等我有空在好好修一下.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.46.66