C ++中的自限堆大小

时间:2015-02-22 01:29:51

标签: c++ memory-management heap-memory

我担心C ++程序可能会消耗不可接受的大量内存。在火灾发生之前,我宁愿让程序将自身限制在最大量的堆内存中,并且在超出此值时会使分配失败,而不是粗暴地吞噬所有可能的RAM并进行交换。理想情况下,我希望将最大堆大小作为我的程序的命令行参数,类似于Java虚拟机的-Xmx选项。如果没有手动计算每个小分配的bean,是否有任何语言功能可以实现这一点?

1 个答案:

答案 0 :(得分:1)

静态堆栈和堆大小

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

对于 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 ++ 运营商新删除(malloc并在C中免费)或
  • 在您的平台上使用分配挂钩(例如,用于MS CRT的_CrtSetAllocHook)。

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

相关问题