Search code examples
c++coperating-systemstack-memory

C/C++ maximum stack size of program on mainstream OSes


I want to do DFS on a 100 X 100 array. (Say elements of array represents graph nodes) So assuming worst case, depth of recursive function calls can go upto 10000 with each call taking upto say 20 bytes. So is it feasible means is there a possibility of stackoverflow?

What is the maximum size of stack in C/C++?

Please specify for gcc for both
1) cygwin on Windows
2) Unix

What are the general limits?


Solution

  • In Visual Studio the default stack size is 1 MB i think, so with a recursion depth of 10,000 each stack frame can be at most ~100 bytes which should be sufficient for a DFS algorithm.

    Most compilers including Visual Studio let you specify the stack size. On some (all?) linux flavours the stack size isn't part of the executable but an environment variable in the OS. You can then check the stack size with ulimit -s and set it to a new value with for example ulimit -s 16384.

    Here's a link with default stack sizes for gcc.

    DFS without recursion:

    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())