迭代超过10GB +二进制文件

时间:2016-09-24 01:26:26

标签: c++ performance c++11

读取10GB二进制文件并解析每个字节而不使用boost库的最简单方法是什么?

它与流,文件,内存映射文件等混淆。

我真的只想要这样的东西:

char* buffer = read(filename, binary);

while(buffer != EOF){
    //Read byte
    ++buffer;
}

由于文件大小,性能确实很重要。

2 个答案:

答案 0 :(得分:1)

如果您希望顺序访问具有良好的性能(从头到尾阅读),请使用fread()。您可以将FILE*存储在std::shared_ptr RAII中:

std::shared_ptr<FILE> file(fopen(...), fclose);

您可以忽略C ++流,内存映射文件,Boost等。这些都不会比fread()更快。

答案 1 :(得分:0)

因为你不关心表现,所以 一个简单的while ifstream循环可以一次提取一个字节:

#include <iostream>
#include <fstream>

int main(){

  std::ifstream infile("file.txt");

  while (infile){

    //get next byte
    char c;
    infile.get(c);

    //process byte
    std::cout << c;
  }

}