在内存压力下匿名mmap优于malloc的优点

san*_*san 5 c c++ memory memory-management

我正在运行一些大型数组处理代码(在运行Linux的Pentium上).数组的大小足以使进程交换.到目前为止它正在工作,可能是因为我试图保持我的读写连续.但是,我很快就需要处理更大的数组.在这种情况下,切换到匿名mmapped块有帮助吗?

如果是这样,请解释原因.

在我的浅薄理解中,mmap实现了一个从tmpfs分区挂载的内存映射文件,该内存压力会回落到交换机制.我想要理解的是mmap如何比标准malloc做得更好(为了我或假设它确实更好,我不知道是不是这样).

注意:请不要建议获得64位或更多的RAM.遗憾的是,这不是一种选择.

caf*_*caf 15

支持malloc()分配的内存由内核处理,其方式与支持创建的私有匿名映射的内存大致相同mmap().事实上,对于大型分配,无论如何malloc()都会创建一个匿名映射mmap()来支持它,所以你不太可能通过明确地使用mmap()自己来看到很多差异.

在一天结束时,如果您的工作集超过了物理内存大小,那么您将需要使用swap,以及您是否使用创建的匿名映射mmap()malloc()不会更改它.你可以做的最好的事情是尝试重构你的算法,使其具有良好的引用位置,这将减少交换伤害你的程度.

您还可以尝试通过madvise()系统调用向内核提供有关内存使用情况的一些提示.

  • @san:内核用于将脏页写入文件支持的映射或交换支持的映射的机制实际上非常密切相关.使用文件支持的映射的优点是您可以将文件放在您知道比交换更快的设备上. (3认同)