C++ Boost 写内存映射文件

6

我正在寻找使用C++和boost库快速写文件的方法。我想使用内存映射文件。但是几乎所有的示例都是关于读取的。
工作非常简单。有一个字符串数组,数组元素大约有200万个。

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

如何使用内存映射文件完成此操作?在哪里可以找到使用内存映射文件写入文件的相关信息?

感谢您的关注。

3个回答

13

你可以使用Boost Iostreams的mapped_file{_sink,_source} 来实现这一点。

虽然Boost Interprocess确实使用了映射文件,但对于这种原始访问,最好使用IOstreams。

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

在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"));
}

添加了一个演示在Coliru上实时查看 - sehe
谢谢你的帮助。我看过了你的许多文章并从中学到了很多。 - blank_popup

3

1

我不知道有什么便携的方法可以处理内存映射文件(也许boost有一些,通常boost会有...)。你使用Linux吗?那么有很好的机制可以使用内存映


如果您喜欢这个答案,可以考虑点赞 @blank_popup。 - Erik Alapää

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接