【问题标题】:increase stack size to 20 gb giving integer overflow error将堆栈大小增加到 20 GB 给出整数溢出错误
【发布时间】:2016-02-01 07:49:38
【问题描述】:

我需要运行一个 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]

如何扩展堆栈?

【问题讨论】:

  • 也许尝试使用堆代替?问题很可能是您无法将 20*1024*1024*1024 存储到 rlim_cur 中,因为它只是一个整数。您尝试存储的数字是 35 位长,因此您不能将其存储在 32 位整数中。
  • 如果 rlim_cur 是 32 位 int,您可能在 32 位平台上,无论如何都无法处理超过 4GB 的数据。 arch 命令说明了什么?

标签: linux memory c stack


【解决方案1】:

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

要做到这一点,请使用 64 位的类型。在setrlimit 的描述中,我看到rlim_cur 的类型为rlim_t。所以使用这种 64 位类型似乎很自然:

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

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 2021-12-14
    • 2013-11-15
    • 2021-03-17
    • 2011-11-20
    • 1970-01-01
    • 2015-02-24
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多