【问题标题】:How to access chunk of memory from memory mapped file using boost?如何使用 boost 从内存映射文件中访问大块内存?
【发布时间】:2013-06-19 21:47:23
【问题描述】:

我正在尝试读取 x,y,z 中的大文件。通常它会遇到 gbs 的数据。 我已经使用 Boost 创建了内存映射文件。但是,我仍然不太清楚如何从这个文件中访问一块内存。

Boost 提供函数 char* data(),它返回指向缓冲区第一个字节的指针。(我将整个数据作为缓冲区)。
有没有办法可以逐块读取数据。理想情况下,我想以 10,000 个为单位读取数据。

以下是代码。

boost::iostreams::mapped_file_source file;
std::string filename("MyFile.pts");
unsigned size = 58678952192;  
file.open(filename, size);
int numBytes = size*sizeof(float)*3;  
cl_float3 *data = new cl_float3[size];
float * tmp = (float*)file.data();

for(int i = 0; i < size;i++)     
{
  data[i].x = tmp[i*3];
  data[i].y = tmp[i*3+1];
  data[i].z = tmp[i*3+2];
}
delete[] tmp;

【问题讨论】:

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


    【解决方案1】:

    boost::iostreams 的行为就像 std::basic_iostream 我们可以使用未格式化的IO

    char buff[10000];
    file.read(buff,10000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多