Cambiar el tamaño de la stack para una aplicación C ++ en Linux durante la comstackción con el comstackdor GNU

En OSX durante la comstackción del progtwig C ++ con g++ utilizo

 LD_FLAGS= -Wl,-stack_size,0x100000000 

pero en SUSE Linux constantemente recibo errores como:

 x86_64-suse-linux/bin/ld: unrecognized option '--stack' 

y similar.

Sé que es posible usar

 ulimit -s unlimited 

pero esto no es bueno ya que no siempre un solo usuario puede hacer eso.

¿Cómo puedo boost el tamaño de la stack en Linux con GCC para una sola aplicación?

Puede establecer el tamaño de la stack mediante progtwigción con setrlimit , por ejemplo

 #include  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; } 

Nota: incluso cuando se usa este método para boost el tamaño de la stack, no se deben declarar grandes variables locales en main() , ya que puede obtener un desbordamiento de la stack tan pronto como ingrese main() , antes de que el código getrlimit / setrlimit haya tenido un posibilidad de cambiar el tamaño de la stack. Por lo tanto, cualquier variable local grande debe definirse solo en las funciones que posteriormente se invocan desde main() , después de que el tamaño de la stack se haya aumentado con éxito.

En lugar de stack_size , usa --stack como tal:

 gcc -Wl,--stack,4194304 -o program program.c 

Este ejemplo debería darle 4 MB de espacio de stack. Funciona en GCC de MinGW, pero como dice la página de manual, “Esta opción es específica del puerto del vinculador PE i386” (es decir, solo funciona para generar binarios de Windows). Parece que no hay una opción para los binarios ELF.

Considere el uso -fsplit-stack opción -fsplit-stack https://gcc.gnu.org/wiki/SplitStacks

Cámbielo con ulimit bash built-in, o setrlimit (), o al iniciar sesión con PAM (pam_limits.so).

Es un límite de recursos de usuario configurable; ver RLIMIT_STACK en setrlimit (2).

http://bytes.com/topic/c/answers/221976-enlarge-stack-size-gcc