在使用 GNU 编译器进行编译期间更改 Linux 中 C++ 应用程序的堆栈大小

2023-11-29

在 OSX 中 C++ 程序编译期间g++ I use

LD_FLAGS= -Wl,-stack_size,0x100000000

但在 SUSE Linux 中我经常遇到如下错误:

x86_64-suse-linux/bin/ld: unrecognized option '--stack'

和类似的。

我知道可以使用

ulimit -s unlimited

但这并不好,因为单个用户并不总是可以做到这一点。

如何使用 GCC 增加 Linux 中单个应用程序的堆栈大小?


您可以通过编程方式设置堆栈大小设置限制, e.g.

#include <sys/resource.h>

int main (int argc, char **argv)
{
    const rlim_t kStackSize = 16 * 1024 * 1024;   // min stack size = 16 MB
    struct rlimit rl;
    int result;

    result = getrlimit(RLIMIT_STACK, &rl);
    if (result == 0)
    {
        if (rl.rlim_cur < kStackSize)
        {
            rl.rlim_cur = kStackSize;
            result = setrlimit(RLIMIT_STACK, &rl);
            if (result != 0)
            {
                fprintf(stderr, "setrlimit returned result = %d\n", result);
            }
        }
    }

    // ...

    return 0;
}

注意:即使使用此方法增加堆栈大小,您也不应该在中声明大的局部变量main()本身,因为一旦您输入,您很可能会遇到堆栈溢出main(), 之前getrlimit/setrlimit代码有机会更改堆栈大小。因此,任何大型局部变量都应该仅在随后调用的函数中定义main(),在成功增加堆栈大小后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在使用 GNU 编译器进行编译期间更改 Linux 中 C++ 应用程序的堆栈大小 的相关文章

随机推荐

  • 尝试将数据附加到子值时应用程序崩溃

    我正在按照 firebase 中所示的说明进行操作 但即使在确保文本条目的类型为字符串之后 我仍然遇到崩溃 这是错误 由于未捕获的异常 InvalidPathValidation 而终止应用程序 原因 child 必须是非空字符串且不包含
  • Java 并发递增值

    我一直在读关于volatile and synchronized但我一直在困惑中摸不着头脑 我希望有人能帮助我解决问题 private HashMap
  • ALTER TABLE 脚本中的 MySQL 变量

    您好以下过程必须将所有约束从一个表移至另一个表 但是我在应删除约束时遇到了一些困难 问题 如何在下面的行中使用变量 ALTER TABLE var referenced table name DROP FOREIGN KEY var con
  • R:将日期从每日转换为每周并绘制它们

    我正在尝试学习如何处理时间序列数据 我创建了一些虚假的每日数据 尝试按周聚合它 然后绘制它 set seed 123 library xts library ggplot2 date decision made seq as Date 20
  • setf 在函数中不起作用

    我在脚本中定义了一个特殊变量 unsorted list 和一个用于重置此变量的函数 defparameter unsorted lst nil defun reset to unsorted list setf unsorted lst
  • 将 .tar.gz 文件的内容从网站读取到 python 3.x 对象中

    我是Python新手 当尝试将 tar gz 文件的内容读入 python 时 我无法弄清楚我做错了什么 我想要阅读的 tar 文件托管在以下网址 ftp ftp ncbi nlm nih gov pub pmc b0 ac Breast
  • 目录的平均和最大大小

    我有一个目录和一堆子目录 如下所示 目录1 sub dir1 sub dir2 sub dir3 sub dir4 sub dir5 等等 数百个 如何查明子目录的平均大小是多少 如何找到子目录的最大大小是多少 全部使用 Unix 命令 T
  • 让输入按钮像 一样运行,无需使用 JavaScript

    我知道我可以分配一个onclick采取行动
  • 获取文件夹中最近更新的文件的 filemtime

    我有一个包含 4 个文件的文件夹 我想提取最近一个文件的最后修改时间 可能并不总是相同 有没有好的方法可以做到这一点 Use a 目录迭代器找到文件 然后简单地比较它们的修改时间 这应该这样做 iterator new DirectoryI
  • 在 apache 中运行 Node.js?

    我们在一台机器上安装了 Apache Web 服务器 该机器还使用 Perl 提供页面服务 对于一个项目 我决定使用 Node js 而不是 Perl Ruby 只是想知道是否可以使用 Apache 作为我的网络服务器 因此它为页面提供服务
  • 在 Qt 中使用 aar 库

    是否可以在 Qt 应用程序中使用 Android Studio 库 aar 文件 问题是 我想用 Qt 实现一个移动应用程序 但只有一个 Android Studio 库 是否可以将该库包含在 Qt 项目中或者让我为其编写一个包装类 如果我
  • 使用 maven-rpm-plugin 如何替换类似于程序集插件的文件中的文本

    我有一个 Maven 项目 我在其中创建了两个包装 一种是 tar gz 文件 针对某些目标 以及针对可以使用 RPM 的 Linux 目标的 RPM 我使用 maven assembly plugin 作为 tar gz 文件 我使用 m
  • 是否需要在@interface中声明ivars来匹配属性? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 2 0 中的属性和实例变量 我对这两个代码段感到困惑 First h interface Student NSObject property nonautomic copy N
  • mySQL 返回每个类别的前 5 名

    我希望能够为每个菜单返回 5 个菜单项 我已经尝试过这几个脚本但没有运气 这是表格 menus menuid int profileName varchar 35 menuitems itemid int name varchar 40 这
  • 容器中的文本字段 - 键盘隐藏文本

    我在底部的容器 VBox 中有一个 TextField 当我选择文本字段输入一些文本时 它会隐藏在键盘后面 iPhone 我把 VBox 放在 ScrollPane 中 但还是一样 我可以以某种方式让键盘获得其高度吗 如何放置键盘未覆盖的文
  • deSolve 包参数可以包含矩阵吗?

    我正在尝试编写一个按年龄分层的 SEIR 模型 也就是说 在我的微分方程中 我有一个群体行动参数 它是 20 个年龄段的 beta 感染比例 易感人数 的总和 传输系数 是根据接触矩阵计算得出的 接触矩阵有 20 列和行 代表年龄类别 行
  • 使用 std::vector 初始化 Eigen::vector

    我以前见过它 但我不记得如何有效地初始化Eigen Vector已知长度的std vector相同长度的 这是一个很好的例子 std vector
  • Elastic Search 批量 API、管道和 Geo IP

    我使用 Bulk API 将数据导入到我的 ELK 堆栈 index index waf type logs id 325d05bb6900440e id 325d05bb6900440e country US ip 1 1 1 1 pro
  • 如何在 SWT / Java 应用程序中禁用 Mac 操作系统中的全屏按钮?

    我正在开发 SWT 应用程序 它在 Windows 上运行良好 但当我在 Mac 上运行相同的代码时 我的外壳右上角有一个全屏按钮 单击该全屏按钮后 应用程序停止响应并且没有任何反应 我想禁用该全屏按钮的点击 display Display
  • 在使用 GNU 编译器进行编译期间更改 Linux 中 C++ 应用程序的堆栈大小

    在 OSX 中 C 程序编译期间g I use LD FLAGS Wl stack size 0x100000000 但在 SUSE Linux 中我经常遇到如下错误 x86 64 suse linux bin ld unrecognize