c ++ boost写入内存映射文件
c++ boost write memory mapped file
我正在寻找使用 C++ 和 boost 库快速编写文件的方法。我想使用内存映射文件。但是几乎所有的例子都是关于阅读的。
工作很简单。有一个字符串数组。数组元素约200万
ofstream outFile("text.txt");
for (int i = 0; i < 2000000; ++i) {
outFile << strArray[i] << "\n";
}
outFile.close();
如何使用内存映射文件来实现?在哪里可以找到使用内存映射文件的写入文件?
感谢您的关心
我知道没有可移植的方法来处理内存映射文件(虽然 boost 可能有一些东西,boost 通常有......)。您在使用 Linux 吗?然后有很好的机制可以用内存映射文件编写高性能的东西,例如地图(2)。这些机制也可以部分移植到其他主要 Unix OS:es。 (是的,Linux 是 Unix)对于某些应用程序,使用线程(当然共享虚拟内存 space)是一种替代方法。那你就没有便携性问题了。
有一个专门用于此的增强库。它被称为 "boost interprocess"。
文档(带示例)在这里:
http://www.boost.org/doc/libs/1_59_0/doc/html/interprocess.html
您可以为此使用 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
#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"));
}
我正在寻找使用 C++ 和 boost 库快速编写文件的方法。我想使用内存映射文件。但是几乎所有的例子都是关于阅读的。
工作很简单。有一个字符串数组。数组元素约200万
ofstream outFile("text.txt");
for (int i = 0; i < 2000000; ++i) {
outFile << strArray[i] << "\n";
}
outFile.close();
如何使用内存映射文件来实现?在哪里可以找到使用内存映射文件的写入文件?
感谢您的关心
我知道没有可移植的方法来处理内存映射文件(虽然 boost 可能有一些东西,boost 通常有......)。您在使用 Linux 吗?然后有很好的机制可以用内存映射文件编写高性能的东西,例如地图(2)。这些机制也可以部分移植到其他主要 Unix OS:es。 (是的,Linux 是 Unix)对于某些应用程序,使用线程(当然共享虚拟内存 space)是一种替代方法。那你就没有便携性问题了。
有一个专门用于此的增强库。它被称为 "boost interprocess"。
文档(带示例)在这里:
http://www.boost.org/doc/libs/1_59_0/doc/html/interprocess.html
您可以为此使用 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
#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"));
}