小编Bas*_*tch的帖子

Linux 上内存过量使用的目的是什么?

我知道内存过量使用,我非常不喜欢它并且通常禁用它。我不是在考虑基于setuid的系统进程(比如那些 runningsudopostfix),而是一个普通的 Linux 进程,它是由一些没有管理员权限的用户在某个命令行上启动的。

一个编写良好的程序可能malloc(或mmap经常被 使用malloc)比可用内存更多的内存,并在使用它时崩溃。如果没有内存过量使用,那mallocmmap将失败,而编写良好的程序将捕获该失败。malloc当使用失败的结果时,编写不佳的程序(使用时不检查失败)会崩溃malloc

当然,虚拟地址空间(由mmapso by扩展malloc)与 RAM 不同(RAM 是由内核管理的资源,请参阅this;进程的虚拟地址空间由execve(2)初始化并由mmap& sbrkso don扩展不直接消耗RAM,只消耗虚拟内存)。

请注意,当真正需要时,可以使用madvise(2)来优化 RAM 使用(它可以给出提示,使用MADV_DONTNEED内核将一些页面交换到磁盘上)。想要过度使用的程序可以将mmap(2)MAP_NORESERVE. 我对内存过度使用的理解就像每个内存映射(byexecvemmap)都隐式使用MAP_NORESERVE

我的看法是它对非常有缺陷的程序非常有用。但恕我直言真正的开发人员应该经常检查的失败mallocmmap以及相关的虚拟地址空间变化的功能(例如像在这里)。我研究过的大多数源代码的自由软件程序都有这样的检查,也许是某种 …

linux mmap

14
推荐指数
3
解决办法
5465
查看次数

标签 统计

linux ×1

mmap ×1