我正在创建一个基于文件的点云八叉树,以便在非常大的文件(无法存储在 ram 中)上管理过滤器。这个方法的瓶颈,到目前为止,是叶子的I/O(因为我经常要写,重写文件和读取文件......)
所以我想使用内存映射文件技术来让它更快,我听说了 Boost。
但是当我搜索教程时,我看到了两种技术:
一次使用#include <boost/iostreams/device/mapped_file.hpp>
和另一个
#include <boost/interprocess/file_mapping.hpp>
.
在我的案例中,我必须经常在文件中写入 3D 点的完整 vector ,然后获取这些文件中的所有信息并从中重新创建 vector 。很多 I/O 操作,可能有很多文件。
我想知道我必须使用哪一个?在哪种情况下我必须使用一个而不是另一个?
谢谢!
附言:Is there a difference between boost iostream mapped file and boost interprocess mapped file?我看过这篇文章,但它对我的特定问题没有帮助。
最佳答案
但是,您可以使用其中任何一个:
- 仅使用
boost::iostreams::mapped_file
object 你得到一个文件映射到内存与数组接口(interface)。没有比这更简单的了。您也可以使用boost::iostreams::stream
将std::iostream
接口(interface)附加到映射文件的装饰器。 - 鉴于
boost::interprocess::file_mapping
requires usingboost::interprocess::mapped_region
将file_mapping
映射到内存中。此方法更灵活,因为它允许使用不同的访问权限映射文件的各个部分(而不是整个文件),但它也更复杂。
关于c++ - boost mapped_file 或 file_mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53390105/