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()系统调用向内核提供有关内存使用情况的一些提示.
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |