提升 mapped_file 或 file_mapping
Boost mapped_file or file_mapping
我正在创建一个基于文件的点云八叉树,以便在非常大的文件(无法存储在 ram 中)上管理过滤器。这个方法的瓶颈,到目前为止,就是叶子的I/O(因为我经常要写,重写文件和读取文件...)
所以我想使用内存映射文件技术来让它更快,我听说了Boost。
但是当我搜索教程时,我看到了两种技术:
一次使用 #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? 我看过这个 post,但它对我的特定问题没有帮助。
您可以使用其中任何一个,但是:
- 仅使用
boost::iostreams::mapped_file
object you get a file mapped into memory with array interface. It doesn't get any simpler than that. You can also use boost::iostreams::stream
装饰器将 std::iostream
接口附加到映射文件。
- 而
boost::interprocess::file_mapping
requires using boost::interprocess::mapped_region
将 file_mapping
映射到内存中。此方法更灵活,因为它允许使用不同的访问权限映射文件的各个部分(而不是整个文件),但它也更复杂。
我正在创建一个基于文件的点云八叉树,以便在非常大的文件(无法存储在 ram 中)上管理过滤器。这个方法的瓶颈,到目前为止,就是叶子的I/O(因为我经常要写,重写文件和读取文件...)
所以我想使用内存映射文件技术来让它更快,我听说了Boost。
但是当我搜索教程时,我看到了两种技术:
一次使用 #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? 我看过这个 post,但它对我的特定问题没有帮助。
您可以使用其中任何一个,但是:
- 仅使用
boost::iostreams::mapped_file
object you get a file mapped into memory with array interface. It doesn't get any simpler than that. You can also useboost::iostreams::stream
装饰器将std::iostream
接口附加到映射文件。 - 而
boost::interprocess::file_mapping
requires usingboost::interprocess::mapped_region
将file_mapping
映射到内存中。此方法更灵活,因为它允许使用不同的访问权限映射文件的各个部分(而不是整个文件),但它也更复杂。