内存交换或文件写入/读取

时间:2018-11-15 10:44:10

标签: c++ optimization

我的问题很简单(我想)!
如果我出于任何原因要分配大量内存(假设我想在内存中加载一个很大的点云并对其应用过滤器以减少它,然后再次保存),但是我的计算机没有有足够的内存可以完全打开它,因此它将使用内存交换。

最快的方法是什么:
 -使用内存交换,让计算机执行其操作。
 -使用基于文件的八叉树(我创建将包含我的点的文件)。例如,我读取X点,然后将它们重写到相应的文件中,然后重新读取X点,直到我的大点文件完整阅读。然后,将过滤器应用于每个octree-file-leaf,然后在大文件中将它们一一重写。

有什么办法可以回答这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:1)

作为首选,考虑使用memory mapped file IO。它使您可以访问文件,就好像文件已完全加载到(虚拟)内存中一样,但允许操作系统应用所有智能缓存策略(LRU,预取,平衡缓存与虚拟缓存)来加载和卸载文件中认为合适的部分。分页...)您可能需要确保将文件映射为只读,以便操作系统知道它将不必处理回写脏页。

某种索引结构(八叉树或其他索引结构)是否有益还是很大程度上取决于您要执行的查询类型以及文件系统的IO性能。

相关问题