c++ - 如何使用boost从内存映射文件访问内存块?

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

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

Boost 提供函数 char* data() 返回指向缓冲区第一个字节的指针。(我将整个数据作为缓冲区)。
有没有一种方法可以逐 block 读取数据。理想情况下,我想以 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;

最佳答案

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

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

关于c++ - 如何使用boost从内存映射文件访问内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257654/

相关文章:

C++ 简单的崩溃日志记录

c++ - 带有 gcc 7.3 的 __atomic_fetch_or 的意外 x64 程序集

c - 显示星号的倒金字塔

c# - 如何检查文件锁定?

c++ - 使用 ifstream 在两个线程中处理同一个文件

c++ - 多线程减慢程序 : no False-sharing, 没有互斥锁,没有缓存未命中,工作量不小

c++ - Eclipse错误: Unresolved Inclusion

c++ - boost posix_time : stringstream input fails

c++ - boost read_some 函数丢失数据

c++ - 将 Windows 上的 32 位和 64 位 Boost 构建到同一文件夹中