In OSX during C++ program compilation with g++
I use
LD_FLAGS= -Wl,-stack_size,0x100000000
You can set the stack size programmatically with setrlimit, e.g.
#include <sys/resource.h>
int main (int argc, char **argv)
{
const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB
struct rlimit rl;
int result;
result = getrlimit(RLIMIT_STACK, &rl);
if (result == 0)
{
if (rl.rlim_cur < kStackSize)
{
rl.rlim_cur = kStackSize;
result = setrlimit(RLIMIT_STACK, &rl);
if (result != 0)
{
fprintf(stderr, "setrlimit returned result = %d\n", result);
}
}
}
// ...
return 0;
}
Note: even when using this method to increase stack size you should not declare large local variables in main()
itself, since you may well get a stack overflow as soon as you enter main()
, before the getrlimit
/setrlimit
code has had a chance to change the stack size. Any large local variables should therefore be defined only in functions which are subsequently called from main()
, after the stack size has successfully been increased.
Instead of stack_size
, use --stack
like so:
gcc -Wl,--stack,4194304 -o program program.c
This example should give you 4 MB of stack space. Works on MinGW's GCC, but as the manpage says, "This option is specific to the i386 PE targeted port of the linker" (i.e. only works for outputting Windows binaries). Seems like there isn't an option for ELF binaries.
Consider using -fsplit-stack
option https://gcc.gnu.org/wiki/SplitStacks
Change it with the ulimit bash builtin, or setrlimit(), or at login with PAM (pam_limits.so).
It's a settable user resource limit; see RLIMIT_STACK in setrlimit(2).
http://bytes.com/topic/c/answers/221976-enlarge-stack-size-gcc