我想知道在大多数或大量硬件/系统上,代码 A 是否可能比代码 B 更快。
代码一:
for(i = 0; i < 4; i ++)
file.write(array[i], 1);
代码 B:
// for(i = 0; i < 1; i ++)
file.write(array[i], 4);
我问的原因是因为我希望能够将一个非常长的 64 位连续整数文件写入磁盘。
目前我面临的问题是我的数组,它实际上是一个缓冲区,包含 8 个字节长的对象,而不是 1 个字节的对象,我可以很容易地使用类似的东西编写:
file.write((char*)(array), size_of_array);
我想到了一些解决方案,但它们似乎都非常缺乏想象力并且对我来说很困难。
第一个是迭代 8 个字节:
for(j = 0; j < size_of_array; j ++)
for(i = 0; i < 8; i ++) // 8 == sizeof(uint64_t)
file.write((char*)(array + i + j), 1);
然后我想,为什么不欺骗 write() 为我写 8 个字节呢?我可以这样做吗?
for(j = 0; j < size_of_array; j ++)
file.write((char*)(array + j), 8);
然后我想,好吧......再进一步:
file.write((char*)(array), 8 * size_of_array);
所以我的问题是,将大量数据写入磁盘的最快方法是什么?
总的来说,我建议写一个包含 400 万个对象的缓冲区,然后重新填充缓冲区并再次写入,可能会创建一个几十 GB 大小的文件。
对于那些感兴趣的人,这是一个并行处理实验。第一步是生成数据。这就是我现在的位置。步骤1...