首页 > 解决方案 > 使用 g++-9 设置堆栈大小无效

问题描述

我正在使用此链接器命令在 Ubuntu 18.04 x64 上使用 g++ 9.3.0 构建测试程序:

/usr/bin/g++-9  -O3 -DNDEBUG  -Wl,-z,stack-size=268435456 CMakeFiles/af.dir/main.cpp.o  -o af

我正在使用此功能测试增加的堆栈要求:

float f() {
  float a[3'000'000];
  return a[42];
}

结果表明标准的 8MB 堆栈与stack-size链接器选项值无关。增加堆栈大小的方法是什么?

编辑

测试如下:

标签: c++linuxgcclinker

解决方案


似乎无法在 Ubuntu 18.04 x64 上使用 g++ 9.3.0 链接器选项设置堆栈大小。正如评论中所建议的,我选择了一个运行时选项:

#include <sys/resource.h>
#include <fmt/format.h>

int main() {
  if (struct rlimit rl{1<<28, 1l<<33}; setrlimit(RLIMIT_STACK, &rl))
    fmt::print("Can not set stack size! (errno = {})\n", errno);
  else
    fmt::print("Stack size: {}MiB up to {}GiB\n", rl.rlim_cur/(1<<20), rl.rlim_max/(1<<30));
...

推荐阅读