2014-09-10 40 views
3

我正在开发一个非抢先式多线程库(在C中)。要求是使用getcontextsetcontext等来创建新线程并对其进行管理。图书馆正常工作正常。Malloc不失败,但系统内存不足

我使用malloc为每个线程对象(MyThread的)和i通过打印消息"malloc failed"如果malloc的返回NULL。为了测试极端条件下,我跑它创建子线程来计算子calculations.I跑一个递归函数斐波纳契正常退出fib随着数量的增加而达到极限,在fib 26

但malloc不抱怨。它是到达OOM并杀死进程的linux系统。

问题:为什么malloc返回成功(一个新的指针),而系统发现自己的空间不足?

回答

5

报价can i rely on malloc returning null/linux manuals

默认情况下,Linux遵循一个乐观的内存分配策略。这意味着当malloc()返回非NULL时,不能保证内存真的可用。这是一个非常糟糕的错误。如果事实证明系统内存不足,一个或多个进程将被臭名昭着的OOM杀手所杀。如果Linux在突然失去一些随机挑选的进程并不理想的情况下使用,并且内核版本足够近时,可以使用以下命令关闭此过度使用行为: echo 2>/proc/sys/vm/overcommit_memory

+1

是的。谢谢。按预期工作 – woodstok 2014-09-10 18:40:35

相关问题