C++ 使用g+设置堆栈大小+-9没有效果

C++ 使用g+设置堆栈大小+-9没有效果,c++,linux,gcc,linker,C++,Linux,Gcc,Linker,我正在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堆栈都是如此。增

我正在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堆栈都是如此。增加堆栈大小的方法是什么

编辑

测试如下:

  • float a[3'000'000]导致分段故障(堆芯倾倒)
  • float a[2'000'000]按预期返回
    0

在Ubuntu18.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));
...
#包括
#包括
int main(){

如果(struct rlimit rl{1为什么是appostrophe?为什么不是float a[3000000];?@nivpeled整数文本中的撇号是为了提高可读性而引入的。为什么不是?
3'000000
,所以我可以很容易地数到零,但我看到该选项没有效果的结论是链接器不支持它(至少对于您的平台)顺便说一句,您可以在输入任何使用大容量的函数之前在Launchpad中报告一个bug(或者可能是Binutils Bugzilla)?@yugr如果你能给我指一下文档,文档声称
堆栈大小
选项在我的环境中起作用。我搜索了,但找不到一个明确的声明。即使没有,ld
也应该发出警告。@yugr你能发布一个链接到相应的bug报告页面吗?我不知道链接器在哪里e、 我建议首先在Ubuntu自己的跟踪程序Launchpad(是Binutils bug的页面)中提交一个bug。如果需要,他们会将它重定向到。