我想了解如何升壓內存映射文件的工作。下面的代碼工作,它做它應該做的事情,但問題是它生成的文件存儲在磁盤上(與可執行文件相同的目錄中),而不是內存。也許有一個標誌設置的地方,但我找不到它...
在此先感謝您的任何信息!升壓內存映射文件的問題:他們去磁盤而不是內存
#include <iostream>
#include <string>
#include <cstring>
#include <boost/iostreams/device/mapped_file.hpp>
using std::cout;
using std::endl;
int main(int argc, char** argv) {
const int blockSize = 64;
bool writer = false;
if(argc > 1) {
if(!strcmp(argv[1], "w"))
writer = true;
}
boost::iostreams::mapped_file_params params;
params.path = "map.dat";
// params.length = 1024; // default: all the file
params.new_file_size = blockSize;
if(writer) {
cout << "Writer" << endl;
params.mode = std::ios_base::out;
}
else {
cout << "Reader" << endl;
params.mode = std::ios_base::in;
}
boost::iostreams::mapped_file mf;
mf.open(params);
if(writer)
{
char *block = mf.data();
strcpy(block, "Test data block...\0");
cout << "Written: " << block << endl;
}
else
{
cout << "Reading: " << mf.const_data() << endl;
}
mf.close();
return 0;
}
/*
Compiler options: -Wall -I$(PATH_BOOST_INCLUDE) -ggdb
Linker options: -L$(PATH_BOOST_LIBS) -lboost_iostreams-mt -lboost_system-mt -lboost_filesystem-mt -DBOOST_FILESYSTEM_NO_DEPRECATED
*/
編譯器用於:GCC 4.2.1
升壓1.41.0
OS:MacOS X的10.6.2
對不起,但帶有MAP_ANONYMOUS標誌的mmap不需要或不創建文件系統對象。 – 2009-12-20 16:41:17
MAP_ANONYMOUS標誌提供了與通過映射/ dev/zero獲得的映射相同的映射。這可以用在一些非常特殊的情況下,但我認爲這不是問題所在。 – 2009-12-20 16:44:18
我不使用mmap,但boost :: iostreams :: mapped_file。這就是我的問題所在。 – Pietro 2009-12-20 17:29:15