如何强制程序看起来内存不足?

jwh*_*ock 29 c++ linux debugging memory-management

我有一个C/C++程序,可能会在内存不足时挂起.我们通过同时运行多个副本来发现这一点.我想在不破坏开发机器性能的情况下调试程序.有没有办法限制可用的内存,以便新的或malloc将返回一个NULL指针,比如说,请求500K的内存?

cho*_*ida 31

尝试转动问题并询问如何限制操作系统允许您的进程使用的内存量.

尝试查看http://ss64.com/bash/ulimit.html

试试说:ulimit -v

这是另一个有点旧的链接,但提供了更多的背景:http: //www.network-theory.co.uk/docs/gccintro/gccintro_77.html

  • 这对我有用.谢谢!具体来说,我运行程序,使用`ps`获取进程ID,然后使用`cat/proc/PID/status`获取VmPeak和VmSize,以KB为单位(在我的例子中为817756).然后我跑了`ulimit -v 800000`并再次尝试,并迅速陷入内存不足的情况(0从malloc返回).我也可以在gdb(`gdb --args ./program --arg1 --arg2`)下运行它并跟踪代码. (4认同)

Tom*_*Tom 9

一种方法是在malloc()周围编写一个包装器.

static unsigned int requested =0;

void* my_malloc(size_tamount){

   if (requested + amount < LIMIT){
       requested+=amount;
       return malloc(amount);
   }

   return NULL
}
Run Code Online (Sandbox Code Playgroud)

你可以使用#define来重载你的malloc.

正如GMan所说,你也可以重载新的/删除操作符(对于C++的情况).

不确定这是最好的方式,还是你在寻找什么

  • 更好的是过载全局运算符new/delete,因为所有分配都必须通过它,而不更改任何其他代码. (2认同)

APr*_*mer 5

  • 哪个OS?对于Unix,请参阅ulimit -d/limit datasize,具体取决于您的shell(sh/csh).

  • 您可以为malloc编写一个包装器,它在您想要的circonstance中返回一个错误.根据您的操作系统,您可以将其替换为实现的操作系统.