首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用g++-9设置堆栈大小没有任何影响。

使用g++-9设置堆栈大小没有任何影响。
EN

Stack Overflow用户
提问于 2020-05-10 09:24:42
回答 1查看 372关注 0票数 4

我正在使用g++ 9.3.0在Ubuntu18.04 x64上使用以下链接器命令构建一个测试程序:

代码语言:javascript
复制
/usr/bin/g++-9  -O3 -DNDEBUG  -Wl,-z,stack-size=268435456 CMakeFiles/af.dir/main.cpp.o  -o af

我正在用这个函数测试增加的堆栈需求:

代码语言:javascript
复制
float f() {
  float a[3'000'000];
  return a[42];
}

结果表明,无论stack-size链接器选项值如何,都有一个标准的8MB堆栈。增加堆栈大小的方法是什么?

编辑

试验结果如下:

  • float a[3'000'000];导致Segmentation fault (core dumped)
  • float a[2'000'000];返回0与预期的
EN

回答 1

Stack Overflow用户

发布于 2020-05-12 05:54:49

使用g++ 9.3.0链接器选项在Ubuntu18.04 x64上设置堆栈大小似乎是不可能的。正如评论中所建议的那样,我选择了一个运行时选项:

代码语言:javascript
复制
#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));
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61709726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档