加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux中的malloc() – “无法保证内存确实可用”?

发布时间:2020-12-14 00:31:14 所属栏目:Linux 来源:网络整理
导读:我正在制作一个游戏,将世界划分为描述世界的数据块.我将块保存在动态分配的数组中,因此在初始化世界的数据结构时我必须使用malloc(). 阅读 malloc() man page,有一个注意事项如下: By default,Linux follows an optimistic memory allocation strategy. Thi
我正在制作一个游戏,将世界划分为描述世界的数据块.我将块保存在动态分配的数组中,因此在初始化世界的数据结构时我必须使用malloc().

阅读malloc() man page,有一个注意事项如下:

By default,Linux follows an optimistic memory allocation strategy.
This means that when malloc() returns non-NULL there is no guarantee
that the memory really is available. In case it turns out that the
system is out of memory,one or more processes will be killed by the
OOM killer. For more information,see the description of
/proc/sys/vm/overcommit_memory and /proc/sys/vm/oom_adj in proc(5),and the Linux kernel source file
Documentation/vm/overcommit-accounting.

如果Linux设置为使用乐观内存分配,那么这是否意味着它并不总是返回我在调用malloc()时请求的全部内存量?

我读到通过修改内核来禁用乐观内存分配,但我不想这样做.

那么有没有办法检查程序是否已分配所请求的金额?

解决方法

从应用程序的角度来看,这不是您需要处理的事情.不希望被“OOM杀手”杀死的随机进程的用户将通过自身禁用过度使用

echo "2" > /proc/sys/vm/overcommit_memory

这是他们的选择,而不是你的选择.

但从另一个角度来看,这并不重要.典型的“推荐”交换量是如此荒谬,以至于没有合理数量的malloc将无法使用物理存储来支持它.但是,您可以轻松分配这么多(即使使用强制MAP_POPULATE或手动触摸它),以保持系统抖动交换数小时/天/周.没有规范的方法要求系统通知您,如果您想要的内存量将使系统交换陷入困境,则会出错.

整个情况一团糟,但作为应用程序开发人员,您在修复中的角色只是正确使用malloc并检查null返回值.其余的责任在于发行版和内核维护者.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读