c ++ boost写入内存映射文件

时间:2015-10-10 06:33:34

标签: c++ boost memory-mapped-files

我正在寻找使用C ++和boost库快速编写文件。我想使用内存映射文件。但几乎所有的例子都是关于阅读 工作很简单。有一个字符串数组。数组元素大约有2百万。

ofstream outFile("text.txt");
for (int i = 0; i < 2000000; ++i) {
    outFile << strArray[i] << "\n";
}
outFile.close();

如何使用内存映射文件执行此操作?我在哪里可以找到使用内存映射文件的文件?

感谢您的关注。

3 个答案:

答案 0 :(得分:6)

你可以使用Boost Iostreams mapped_file{_sink,_source}

虽然Boost Interprocess会使用映射文件,但您最好使用IOstream进行此类原始访问。

请参阅http://www.boost.org/doc/libs/1_50_0/libs/iostreams/doc/classes/mapped_file.html

<强> Live On Coliru

#include <boost/iostreams/device/mapped_file.hpp>
#include <boost/iostreams/stream.hpp>
#include <vector>

namespace bio = boost::iostreams;

int main() {
    using namespace std;
    vector<string> strArray(2000000);

    bio::mapped_file_params params;
    params.path          = "text.txt";
    params.new_file_size = 30ul << 30;
    params.flags         = bio::mapped_file::mapmode::readwrite;

    bio::stream<bio::mapped_file_sink> out(params);

    copy(strArray.begin(), strArray.end(), ostream_iterator<string>(out, "\n"));
}

答案 1 :(得分:2)

有一个专门用于此的增强库。它被称为“提升进程间”。

文档(带示例)在这里:

http://www.boost.org/doc/libs/1_59_0/doc/html/interprocess.html

答案 2 :(得分:1)

我知道没有可移植的方式来做内存映射文件(虽然可能有一些东西,通常会提升......)。你在用Linux吗?然后有很好的机制来编写具有内存映射文件的高性能内容,例如: MMAP(2)。这些机制也部分可移植到其他主要的Unix操作系统:es。 (是的,Linux是Unix)对于某些应用程序,使用线程(当然共享虚拟内存空间)是另一种选择。然后你没有可移植性问题。