我正在创建一个基于文件的点云Octree,以便管理非常大的文件(不能存储在ram中)的过滤器。到目前为止,此方法的瓶颈是叶子的I / O(因为我经常不得不编写,重写文件和读取文件...)
因此,我想使用内存映射文件技术使其速度更快,并且听说了Boost。
但是当我搜索教程时,我看到了2种技巧:
一种用途#include <boost/iostreams/device/mapped_file.hpp>
和另一个
#include <boost/interprocess/file_mapping.hpp>
。
在我的案例中,我将不得不经常在文件中编写3D点的整体矢量,然后获取这些文件中的所有信息并从中重新创建矢量。很多I / O操作可能包含很多文件。
我想知道我必须使用哪一个?在这种情况下,我必须使用一个而不是另一个?
谢谢!
P.S:Is there a difference between boost iostream mapped file and boost interprocess mapped file?我看过这篇文章,但是对于我的特定问题并没有帮助。
答案 0 :(得分:1)
您可以使用其中任何一种,
boost::iostreams::mapped_file
对象,您将获得一个文件,该文件通过数组接口映射到内存中。没有比这更简单的了。您还可以使用boost::iostreams::stream
装饰器将std::iostream
接口附加到映射文件。boost::interprocess::file_mapping
requires using boost::interprocess::mapped_region
则将file_mapping
映射到内存中。这种方法更加灵活,因为它允许映射具有不同访问权限的文件的一部分(而不是整个文件),但是它也更加复杂。