c++ - 使用 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
链接器选项值无关。增加堆栈大小的方法是什么?
编辑
测试如下:
float a[3'000'000];
原因Segmentation fault (core dumped)
float a[2'000'000];
0
按预期返回
解决方案
似乎无法在 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));
...
推荐阅读
- f# - F# - 联合案例名称中的句点
- python - 如何遍历两个不同长度的字典?
- excel - 在VBA中,取消选中复选框后如何让组合框删除项目?
- typescript - Typescript Generic 基于子类类型
- javascript - 如何在不自动更改 React Native 中 tabBarIcon 和 tabBarLabel 的位置的情况下增加反应导航 tabBar 的标签栏高度?
- node.js - 使用 ReactJS 前端和 NodeJS 后端实现 webhook
- javascript - fluent-ffmpeg 视频有拉伸图像
- unity3d - Unity Animator 组件在不同场景中为空
- c++ - 如何正确实例化一个容器中的对象并将 shared_ptr 存储在一个单独的容器中?
- java - 如何让我的 .jar 文件在启动时运行?Ubuntu/流行!_OS