Malloc没有失败,但系统内存不足

时间:2014-09-10 18:22:55

标签: c linux multithreading memory

我正在linux中开发一个非抢占式多线程库(在C中)。要求是使用getcontext setcontext等来创建新线程并对其进行管理。图书馆正常工作正常情况。

我为每个线程对象(MyThread)使用malloc,如果malloc返回"malloc failed",则通过打印消息NULL来优雅地退出。为了测试极端条件,我运行了一个递归的fibonacci函数,它创建了子线程计算子计算。我运行fib的数字越来越多,达到fib 26的限制。

但malloc并没有抱怨。这是linux系统到达OOM并杀死进程。

问题:当系统发现自己没有空间时,为什么malloc会返回成功(新指针)?

1 个答案:

答案 0 :(得分:5)

引用can i rely on malloc returning null / linux manuals

  

默认情况下,Linux遵循乐观的内存分配策略。这意味着当malloc()返回非NULL时,无法保证内存确实可用。这是一个非常糟糕的错误。如果事实证明系统内存不足,臭名昭着的OOM杀手就会杀死一个或多个进程。如果在不太可能突然丢失一些随机选择的进程的情况下使用Linux,而且内核版本足够新,可以使用如下命令关闭这种过度使用的行为:   echo 2>的/ proc / SYS / VM / overcommit_memory