首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Malloc没有失败,但是系统正在耗尽内存。

问Malloc没有失败,但是系统正在耗尽内存。
EN

Stack Overflow用户
提问于 2014-09-10 18:22:55
回答 1查看 130关注 0票数 3

我正在linux中开发一个非抢占多线程库(用C语言)。需要使用getcontext、setcontext等来创建新线程并管理它们。图书馆在正常情况下按预期工作。

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 18:25:42

引用我可以依赖malloc返回空吗? / linux手册

默认情况下,Linux遵循乐观内存分配策略。这意味着当malloc()返回非空时,无法保证内存确实可用。这是个很严重的错误。如果系统内存不足,一个或多个进程将被臭名昭著的OOM杀手杀死。如果Linux是在突然丢失一些随机选择的进程不太理想的情况下使用的,而且内核版本是最近的,那么可以使用诸如: echo 2> /proc/sys/vm/overcommit_memory这样的命令来关闭这种过度提交行为。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25772446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档