我正在linux中开发一个非抢占多线程库(用C语言)。需要使用getcontext、setcontext等来创建新线程并管理它们。图书馆在正常情况下按预期工作。
我对每个线程对象(MyThread)使用malloc,如果malloc返回NULL.To测试极端条件,我将通过打印消息"malloc failed"优雅地退出,运行一个递归fibonacci函数,该函数创建子线程来计算子计算,我以越来越多的数字运行fib,并达到了fib 26的极限。
但是malloc并没有抱怨。是linux系统到达OOM并杀死进程。
问:为什么malloc返回成功(一个新的指针),而系统发现自己没有空间?
发布于 2014-09-10 18:25:42
默认情况下,Linux遵循乐观内存分配策略。这意味着当malloc()返回非空时,无法保证内存确实可用。这是个很严重的错误。如果系统内存不足,一个或多个进程将被臭名昭著的OOM杀手杀死。如果Linux是在突然丢失一些随机选择的进程不太理想的情况下使用的,而且内核版本是最近的,那么可以使用诸如: echo 2> /proc/sys/vm/overcommit_memory这样的命令来关闭这种过度提交行为。
https://stackoverflow.com/questions/25772446
复制相似问题