我担心C ++程序可能会消耗不可接受的大量内存。在火灾发生之前,我宁愿让程序将自身限制在最大量的堆内存中,并且在超出此值时会使分配失败,而不是粗暴地吞噬所有可能的RAM并进行交换。理想情况下,我希望将最大堆大小作为我的程序的命令行参数,类似于Java虚拟机的-Xmx
选项。如果没有手动计算每个小分配的bean,是否有任何语言功能可以实现这一点?
答案 0 :(得分:1)
要为您的可执行文件静态设置堆栈和堆大小(即在构建时),您可以根据您的工具链执行以下操作之一。
对于 Visual Studio ,可以设置堆栈和堆大小:
/STACK:NNN
和/HEAP:MMM
命令行选项,其中NNN
和MMM
分别是堆栈和堆大小,#pragma comment(linker "/STACK:NNN")
和#pragma comment(linker "/HEAP:MMM")
。或者,您可以使用 EDITBIN 工具修改现有可执行文件的堆栈和堆大小。
对于 gcc ,可以设置堆栈和堆大小:
-Wl,--stack=NNN
和-Wl,--heap=MMM
。要动态设置堆大小(即在运行时),您可以:
在您的operator / hook实现中,您可以根据需要限制堆大小(即无法分配内存)(例如,基于命令行参数)。