C/C++ maximum stack size of program on mainstream OSes
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())
How to increase stack size when compiling a C++ program using MinGW compiler
In order to change the size of the stack to run a C++ program that may cause a stack overflow, use the following command.
g++ -Wl,--stack,16777216 -o file.exe file.cpp
This increases the stack size to 16MiB, if you need it to be bigger then increase the value from 16777216
bytes to whatever value you need.
Do be sure to replace file.exe
and file.cpp
with the corresponding names of the file and executable that you are running.
Also note that in the command its -Wl
(lower case L)
Increase stack size in c++
I have solved problem, It should work in all IDEs I think, but it definitely works in Visual Studio. PROJECT->Properties->Configuration Properties->Linker->System->Stack Reserve Size=4194304 . This makes stack size 4 MB.
Is there a way to increase the stack size in c#?
The big bad warning
If you use recursion in a program and reach a point where having a StackOverflowException is an actual threat, please do not consider increasing the stack size as a valid solution.
If you encounter a StackOverflowException you are doing something very wrong; you should instead be using a Stack<T>
for depth-first processing, or a Queue<T>
for breadth-first processing. Example.
The solution
This can be achieved by using editbin.exe
, which is installed with this package;
Find the location of editbin.exe
, mine was located at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64\editbin.exe
, I would suggest using Everything by voidtools in lieu of Microsoft's awful search to find this.
Set the stack size manually
Navigate to your bin folder and execute the following:
"<full path of editbin.exe>" /stack:<stack size in bytes, decimal> <your executable name>
For example I executed this:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64\EDITBIN.EXE" /stack:2097152 ExampleProgram.exe
Which set the stack reserve size to 2MB.
With this I was capable of reaching twice the recursion level; (1MB stack reserve on left, 2MB stack reserve on right).
Set the stack size automatically
Right click on your project and select 'Options', then click on 'Build Events' and add the following to your post-build events:
"<full path of editbin.exe>" /stack:<stack size in bytes, decimal> "$(TargetPath)"
For example I added
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64\EDITBIN.EXE" /stack:2097152 "$(TargetPath)"
This will run editbin.exe
every time you build your executable.
Note: You will see a lot lower level of recursion reached when running your program from Visual Studio as you will from running it explicitly via explorer or cmd. You will still however see a 2x increase in the level of recursion met if moving from a 1MB stack reserve to a 2MB stack reserve.
How to increase the gcc executable stack size?
On Linux, you can expand the stack size in /etc/security/limits.conf.
You can check your current stack size by using
$ ulimit -s
8192
Then expand the stack to be double than that:
youruser soft stack 16384
And then relog.
This will increase stack size for all executable you're running, not just GCC's.
How to increase max stack size in c++ using vscode
VSCode uses powershell as its shell and commas are special characters for powershell. You need to put them inside quotes.
g++ -O2 -std=c++11 -Wall "-Wl,--stack=268435456" Untitled1.cpp -o a.exe
should work.
Related Topics
How to Make My Split Work Only on One Real Line and Be Capable to Skip Quoted Parts of String
How to Fix .Pch File Missing on Build
Differencebetween a Static and Const Variable
How to Reduce Compile Time, and Linking Time for Visual C++ Projects (Native C++)
How to Make a Heterogeneous Boost::Map
What's the Difference Between the Win32 and _Win32 Defines in C++
Is There Any Standard Way of Embedding Resources into Linux Executable Image
Boost::Asio - How to Interrupt a Blocked Tcp Server Thread
Differencebetween Exit() and Abort()
How to See the Template Instantiated Code by C++ Compiler
Which C++ Signals/Slots Library Should I Choose