c++ - 内存交换或文件写入/读取
问题描述
我的问题很简单(我猜)!
如果出于任何原因我有大量内存要分配(假设我想在内存中加载一个非常大的点云并对其应用过滤器以减少它然后再次保存它),但我的计算机没有有足够的内存来完全打开它,所以它会使用内存交换。
什么是更快的方法:
- 使用内存交换,让计算机做它的事情。
- 使用基于文件的八叉树(我创建将包含我的点的文件).. 例如,我读取 X 点,并在相应的文件中重写它们,然后重新读取 X 点,直到我的大点文件是完整阅读。然后我在每个八叉树文件叶上应用过滤器,然后在大文件中一个一个地重写它们。
有没有办法回答这个问题?
非常感谢!
解决方案
作为第三个选项,考虑内存映射文件 IO。它允许您访问文件,就好像它已完全加载到(虚拟)内存中一样,但允许操作系统在它认为合适的情况下加载和卸载文件的部分内容,应用所有智能缓存策略(LRU、预取、平衡缓存与缓存)。分页,...)它有;您可能希望确保将文件映射为只读,以便操作系统知道它不必处理写回脏页。
某种索引结构(八叉树或其他)是否有益取决于您将执行的查询类型以及文件系统的 IO 性能。