我目前正在编写一个在不同地方分配内存的程序。我感兴趣的是看看我的程序在堆耗尽内存时的行为,即当malloc()返回NULL时。
是否有编译器选项可以让我将堆大小设置为非常小的值,以便我可以立即看到会发生什么?我正在使用gcc编译器。
答案 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)。