将堆栈大小增加到20 gb,从而产生整数溢出错误

时间:2015-10-29 12:54:08

标签: linux memory c stack

我需要运行一个C程序,在执行时将使用大约20Gb的RAM。我从Change stack size for a C++ application in Linux during compilation with GNU compiler获得了帮助。

我正在尝试使用setrlimit扩展Linux上的堆栈大小。但是当我尝试将20*1024*1024*1024分配给rlim_cur时,编译器

warning: integer overflow in expression [-Woverflow]

如何扩展堆栈?

1 个答案:

答案 0 :(得分:0)

计算20*1024*1024*1024int常数上执行;结果为int类型。在x86_64平台上,int不足以表示大数(大于2 31 ) - 这就是编译器所说的。

要做到正确,请使用64位的类型。在setrlimit的说明中,我看到rlim_cur的类型为rlim_t。因此,使用这种64位类型似乎很自然:

... = (rlim_t)20*1024*1024*1024