如何减少程序的堆大小以查看内存耗尽时的行为?

时间:2013-03-31 17:41:57

标签: c malloc

我目前正在编写一个在不同地方分配内存的程序。我感兴趣的是看看我的程序在堆耗尽内存时的行为,即当malloc()返回NULL时。

是否有编译器选项可以让我将堆大小设置为非常小的值,以便我可以立即看到会发生什么?我正在使用gcc编译器。

4 个答案:

答案 0 :(得分:3)

您可以像这样指定堆栈和堆大小:

gcc -Wl,--stack=xxxxx -Wl,--heap=yyyyy ...

答案 1 :(得分:2)

至少如果在Linux上,您可以在运行程序之前使用ulimit -m <max mem>

答案 2 :(得分:1)

编译为32位并通过保留大块内存耗尽虚拟地址空间(您不需要提交 - 只需保留(这些是Windows术语,我确信它们具有Linux等价物)。

Windows还有可用于限制内存的作业对象,但也许简单的VirtualAlloc技术可行。

关于它的好处是你可以动态地改变限制,可能使用计时器,在随机时间反复强调程序。

答案 3 :(得分:1)

如何更换malloc&amp;朋友用你自己的代码来模拟病情?我不确定最好的方法,也许LD_PRELOAD可行(some example code here)。