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

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

概述我正在制作一个游戏,将世界划分为描述世界的数据块.我将块保存在动态分配的数组中,因此在初始化世界的数据结构时我必须使用malloc(). 阅读malloc() man page,有一个注意事项如下: By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() re 我正在制作一个游戏,将世界划分为描述世界的数据块.我将块保存在动态分配的数组中,因此在初始化世界的数据结构时我必须使用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返回值.其余的责任在于发行版和内核维护者.

总结

以上是内存溢出为你收集整理的Linux中的malloc() – “无法保证内存确实可用”?全部内容,希望文章能够帮你解决Linux中的malloc() – “无法保证内存确实可用”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1023569.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存