将3d数组写入具有不同顺序的文件

时间:2012-03-21 15:47:19

标签: c++ windows file-io

我有3d数组元素(x,y,z)不在内存中,因为它的大小可能大于4GB。在每个循环中,我只能获得(x,z)的2D数组。由于这种限制,

我可以使用

轻松地将它们保存到订单(x,z,y)的文件中
for (int iz=0;iz < nz; iz++)
    for (int ix=0;ix < nx; ix++)
         fwrite( (unsigned int *)(data+ix+iz*nx), element_size, 1, fp);

相同
         fwrite( (unsigned int *)(data), element_size, nx*nz, fp);

但对于订单(x,y,z)的文件,我必须为每个iy执行此操作

for (int iz=0;iz < nz; iz++) {
     fseek(fp,(iy*nx+iz*nx*ny)*element_size,SEEK_SET);
     fwrite( (unsigned int *)(data+iz*nx), element_size, nx, fp);
}
然而,这是非常缓慢的。在VC ++中有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

C / C ++给出由x组织的数组作为最大的连续切片,因此data [7]包含数据[7] [0-YMAX] [0-ZMAX]的每个值2d单位,类似数据[7] [ 3] [0-ZMAX]是下一个1d单位

那么data和element_size的定义是什么?

当您编写数组的子集时,它将具有Z的连续元素,并且每个Z切片将具有常量Y.如果使用多组连续的Z值进行I / O,你会有连续的Y片。

所以我不明白:

  

我可以使用...

轻松地将它们保存到订单(x,z,y)的文件中

我可能误解了,但我认为代码没有这样做。我认为它写的是x,y,z元素