您可以使用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()