gpt4 book ai didi

c++ - C++ 中的 self 限制堆大小

转载 作者:行者123 更新时间:2023-11-30 05:47:14 30 4
gpt4 key购买 nike

我担心 C++ 程序可能会消耗无法接受的大量内存。与其粗鲁地吞噬所有可能的 RAM 并在陷入困境之前进行交换,我更愿意让程序将自身限制在某个最大堆内存量,并在超过时分配失败。理想情况下,我想让最大堆大小成为我程序的命令行参数,类似于 Java 虚拟机的 -Xmx 选项。如果没有手动对每个小分配进行 bean 计数,是否有任何语言功能可以实现这一点?

最佳答案

静态堆栈和堆大小

要为您的可执行文件静态设置堆栈和堆大小(即在构建时),您可以根据您的工具链执行以下操作之一。

对于 Visual Studio,可以设置堆栈和堆大小:

  • 使用 /STACK:NNN/HEAP:MMM 命令行选项,其中 NNNMMM 是堆栈和堆大小分别,
  • 通过 GUI(项目属性 --> 配置属性 --> 链接器 --> 系统...),或
  • 使用 pragma 指令,例如#pragma comment(linker "/STACK:NNN")#pragma comment(linker "/HEAP:MMM")

或者,您可以使用 EDITBIN 工具修改现有可执行文件的堆栈和堆大小。

对于 gcc,可以设置堆栈和堆大小:

  • 使用命令行选项 -Wl,--stack=NNN-Wl,--heap=MMM

动态堆大小

要动态设置堆大小(即在运行时),您可以:

  • 重载 C++ operators newdelete(C 中的 malloc 和 free)或
  • 在您的平台上使用分配 Hook (例如 _CrtSetAllocHook for MS CRT)。

在运算符/ Hook 的实现中,您可以根据需要(例如,基于命令行参数)限制堆大小(即无法分配内存)。

关于c++ - C++ 中的 self 限制堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28653477/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com