0

私は、多くの大きな (1000 行以上) メソッドを、必要に応じて単体テストできる素敵なチャンクにリファクタリングすることを検討しています。

私のラファクタリングされたブロックの多くには他のリファクタリングされたブロックが含まれており、私の大きなメソッドは他の大きなメソッドによって呼び出された可能性があるためです。

リファクタリングがコールスタックの問題につながる可能性があるかどうかを確認するために、これを議論のために開きたいと思います。ほとんどの場合そうなるとは思えませんが、リファクタリングされた再帰メソッドと、無限ループを作成せずにスタック オーバーフローを引き起こすことができるかどうかについて疑問に思いましたか?

4

4 に答える 4

3

再帰を除いて、コール スタックの問題が発生するまでは心配しません (発生しない可能性があります)。

再帰について: 慎重に実装し、慎重にテストする必要があるため、どのように行っても同じです。

于 2009-04-27T16:03:00.033 に答える
0

技術的には可能だと思います。しかし、コードをテストするときに実際に発生しない限り、心配することはありません。

于 2009-04-27T16:03:45.290 に答える
0

私が子供の頃、コンピューターには 64K の RAM があり、コール スタックのサイズが重要でした。

今日では、議論する価値はほとんどありません。メモリは巨大で、スタック フレームは小さく、いくつかの余分な関数呼び出しはほとんど測定できません。

例として、Python は人為的に小さいコール スタックを持っているため、無限再帰を即座に検出します。デフォルトのサイズは 1000 フレームですが、これは単純な API 呼び出しで調整できます。

Python でスタックに違反する唯一の方法は、何も考えずに Project Euler の問題に取り組むことです。それでも、通常、スタックがなくなる前に時間がなくなります。(100 兆回のループは、人間の寿命よりもはるかに長くかかります。)

于 2009-04-27T16:04:10.093 に答える
0

リファクタリング時に再帰なしでスタックオーバーフローが発生する可能性は非常に低いと思います。これが発生することを確認できる唯一の方法は、スタック自体のメソッド間で大量のデータを割り当ておよび/または渡している場合です。

于 2009-04-27T16:04:39.203 に答える