C/C++中大文件二进制数据的逻辑运算

Ami*_*mir 1 c c++

我有两个二进制文件(数十MB的顺序),我想要或这些文件的每一点.当然,我希望它尽可能高效.

所以我有两种方法可以做到这一点,但我仍然认为(我有点觉得)这应该是一种我不知道的更有效的方式.

给定文件a和b ..我想要做的是a = a | b

  1. 加载两个文件,将它们解析为两个巨大的std :: bitsets和/或它们
  2. 逐个加载两个文件和/或如果一个巨大的for循环它们...

还有其他办法吗?

Mar*_*c B 6

不要逐字节.那会非常慢.而是以块的形式读取文件.找出系统的块大小(4k?8K?64k?)并使用该大小的块读取文件.然后,您可以遍历内存中的字节流并在那里执行OR操作.

从逻辑上讲,即使您一次只能读取一个字节,操作系统仍然会读取整个块的数据,然后丢弃除了您想要的字节之外的所有数据.下一次围绕该块将被缓存,但它仍然会遍历您想要的每个字节的完整读取动作.所以...只需将整个块吸入内存并节省自己浪费的开销.