C++ は再帰の深さを制限しますか? 質問する

C++ は再帰の深さを制限しますか? 質問する

Python には最大再帰深度があります。これは Python がコンパイルされるのではなく解釈されるためと思われます。C++ にも同じ概念がありますか? それとも RAM 制限にのみ関連しているのでしょうか?

ベストアンサー1

C++ の制限はスタックの最大サイズによるものです。これは通常 RAM のサイズよりかなり小さいですが、それでもかなり大きいです。(幸い、文字列のような大きなものはコンテンツ通常はスタック自体には保持されません。

ulimitスタック制限は通常、OS レベルで調整可能です。( Unix を使用している場合は、シェル組み込みのドキュメントを参照してください。) このマシン (OSX) のデフォルトは 8 MB です。

[編集] もちろん、スタックのサイズは、再帰の深さを計算する際にそれだけでは役に立ちません。それを知るには、アクティベーションレコード再帰関数 (スタック フレームとも呼ばれる) のスタック (またはレコード) を読み出します。これを行う最も簡単な方法 (私が知る限り) は、逆アセンブラ (ほとんどのデバッガの機能) を使用して、各関数の開始時と終了時にスタック ポインター調整のサイズを読み取ることです。これは面倒です。(他の方法で解決することもできます。たとえば、2 つの呼び出しにおける変数へのポインターの差を計算するなどです。しかし、特に移植可能なコードの場合は、さらに厄介です。逆アセンブリから値を読み取る方が簡単だと思います。)

おすすめ記事