如何强制程序出现内存不足?

我有一个C / C ++程序可能会挂在内存不足时。 我们通过同时运行多个副本来发现这一点。 我想debugging程序,而不会完全破坏开发机器的性能。 有没有办法限制可用的内存,以便一个新的或malloc将返回一个NULL指针之后,比如500K的内存已被请求?

Solutions Collecting From Web of "如何强制程序出现内存不足?"

试着把问题放在头上,询问如何限制操作系统允许进程使用的内存量。

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

试试说:ulimit -v

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

一种方法是围绕malloc()编写一个包装。

 static unsigned int requested =0; void* my_malloc(size_tamount){ if (requested + amount < LIMIT){ requested+=amount; return malloc(amount); } return NULL } 

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

正如GMan所说,你也可以重载new / delete操作符(对于C ++来说)。

不知道这是最好的方式,或者你正在寻找什么

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

  • 你可以写一个malloc的包装器,它会在你想要的环境中返回一个错误。 取决于你的操作系统,你可以用它来代替实现的操作系统。

这取决于你的平台。 例如,这可以通过使用setrlimit(RLIMIT_DATA,…)在类Unix平台上以编程方式实现。

编辑

在这种情况下,RLIMIT_AS资源也可能是有用的。

覆盖新的和新的[]。

 void* operator new(size_t s) { } void* operator new[](size_t s) { } 

把你自己的代码放在大括号中,选择性地在X次呼叫到新的时候死掉。 通常你会调用malloc来分配内存并返回它。

另一种方式是使用failmalloc ,它是一个共享库,覆盖malloc等,然后失败:-)。 它可以让你控制什么时候失败,并可以随机失败,每隔n次等。

我没有用过自己,但听过好东西。

我曾经有一个在CS 1的学生(C语言,是的,是的,不是我的错)尝试了这个,并且跑出了记忆:

 int array[42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42]..... (42 dimensions); 

然后他想知道为什么会出错

如果你想花钱,SecurityInnovations有一个名为Holodeck的工具,它可以让你的程序注入错误(包括低内存)。 好的事情是你可以随意打开和关闭东西。 我还没有真正使用它,所以我不知道是否有可能使用该工具在某些点处编写故障。 我也不知道什么平台支持…

据我所知,在Linux上, malloc永远不会返回空指针。 相反, OOM杀手将被召唤。 这当然是,除非你已经禁用了OOM杀手。 一些谷歌搜索应该拿出一个结果。

我知道这不是你真正的问题,但它确实与你来自哪里有关。