Вы можете установить размер стека программно с помощью setrlimit , например,
#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;
}
Примечание: даже при использовании этого метода для увеличения размера стека вы не должны объявлять большие локальные переменные в самом main()
, так как вы можете получить переполнение стека, как только вы введете main()
, до getrlimit
/ У setrlimit
кода была возможность изменить размер стека. Поэтому любые большие локальные переменные должны быть определены только в функциях, которые впоследствии вызываются из main()
после успешного увеличения размера стека.