【发布时间】:2011-08-29 23:38:36
【问题描述】:
我需要分配一个大的多维数组为char a[x][32][y],x*32*y 大约是6~12G。 (x, y 在运行时确定。)
我想了一个办法,就是做char *a=malloc(x*32*y),用*(a+32*y*i+y*j+k)代替a[i][j][k]。
但是,与a[i][j][k] 相比,这看起来不太方便。
有没有更好的办法?
添加:
它是a[x][32][datlen],其中datlen 是在运行时确定的,x 是根据内存设置的。
数组中的所有数据都是新的。而且我有 16 或 32GB 内存的数学来运行它。
【问题讨论】:
-
考虑宏还是内联函数?对于如此庞大的数据集,请考虑使用 mmap 和/或其他增加局部性的技术——这可能不是同一个“平面”数组。
-
a[X][N][Y]在概念上映射到什么?我敢打赌,您可以使用 BDB、Sqlite 或 HDF5 将数据留在磁盘上,并让您的程序检索适当大小的块。就你的问题而言,我们只是猜测:)
标签: c dynamic multidimensional-array