1. ホーム
  2. c++

[解決済み] C/C++ プログラムの最大スタックサイズ

2022-06-06 03:25:52

質問

100×100の配列に対してDFSを行いたい。(配列の要素はグラフのノードを表すとします) したがって、最悪のケースを仮定すると、再帰的な関数呼び出しの深さは10000まで行くことができ、各呼び出しは最大で20バイトを取ります。つまり、スタックオーバーフローの可能性があるのでしょうか?

C/C++のスタックの最大サイズは何ですか?

gccの場合、両方とも指定してください。

1) Windowsのcygwin

2) Unix

一般的な制限事項は何ですか?

どのように解決するのですか?

Visual Studio では、デフォルトのスタック サイズは 1 MB だと思います。したがって、再帰深度が 10,000 の場合、各スタック フレームは最大で ~100 バイトとなり、DFS アルゴリズムには十分なはずです。

Visual Studio を含むほとんどのコンパイラーは、スタック サイズを指定できます。いくつかの (すべて?) Linux では、スタック サイズは実行ファイルの一部ではなく、OS の環境変数になります。この場合、スタックサイズを確認するには ulimit -s でチェックし、それを新しい値に設定するには、例えば ulimit -s 16384 .

ここでは リンク には、gcc のデフォルトのスタックサイズがあります。

再帰を使わないDFS。

std::stack<Node> dfs;
dfs.push(start);
do {
    Node top = dfs.top();
    if (top is what we are looking for) {
       break;
    }
    dfs.pop();
    for (outgoing nodes from top) {
        dfs.push(outgoing node);
    }
} while (!dfs.empty())