我正在使用g++ 9.3.0在Ubuntu18.04 x64上使用以下链接器命令构建一个测试程序:
/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];
}结果表明,无论stack-size链接器选项值如何,都有一个标准的8MB堆栈。增加堆栈大小的方法是什么?
编辑
试验结果如下:
float a[3'000'000];导致Segmentation fault (core dumped)float a[2'000'000];返回0与预期的发布于 2020-05-12 05:54:49
使用g++ 9.3.0链接器选项在Ubuntu18.04 x64上设置堆栈大小似乎是不可能的。正如评论中所建议的那样,我选择了一个运行时选项:
#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));
...https://stackoverflow.com/questions/61709726
复制相似问题