4

Objective-C の最大再帰深度の制限は?

4

2 に答える 2

5

Objective-C やほとんどの言語では、事前に設定された最大再帰深度はありません。

さらに、失敗するまで再帰して回数を数える簡単なテストでも、現実的な答えは得られません。実際のプログラムで到達できる深さを過大評価する可能性があります。

呼び出しているメソッド/関数のフレームに十分なスペースがスタックにある限り、呼び出しを続けることができます。フレームには、さまざまなハウスキーピング情報 (通常は固定サイズ)、保存レジスタ (可変サイズ)、およびメソッド/関数のローカル変数 (可変サイズ) が含まれているため、単一のフレーム サイズはありません。

大まかな概算が必要な場合は、コード内で発生するローカル変数の平均数とタイプを使用して関数を宣言し、それを再帰的に呼び出すことができる回数を数えることができます。これにより、実行しているマシンの近似値が得られます。

Mac OS X 自体がスタック サイズに上限を課していますulimit -s。このAppleドキュメントも参照してください

于 2012-05-04T09:41:45.263 に答える
2

ほぼ確実にスタックのサイズに依存します。

于 2012-05-04T09:18:16.850 に答える