堆栈上的C ++大型多维数组

时间:2018-10-09 17:23:10

标签: c++ multidimensional-array

我的模拟尝试预测长时间的系统需求...输出结果导致非常大的4D数组(我使用4维来最大程度地减少将数据写入数据时的错误机会数组,即我可以通过这种方式更好地理解它!)。

数组大小将为25x4x3x20000,我需要至少为一个(无符号整数),但我知道堆栈无法处理此数据量。

unsigned int ar[25][4][3][2000];

我一直在四处寻找不同的解决方案。但是,我仍然不确定要执行哪一个。所以我的问题是:在性能和良好实践方面哪个更好:

  1. 使用数组向量:,如stackoverflow.com/questions/18991765中所述...但是,关于如何转换4D尺寸的任何想法吗?
  

std::vector< std::array<int, 5> > vecs; vecs.reserve(N);

  1. 使用4D向量和push_back():我之所以没有使用它,是因为我知道数组的最终大小,并且我想防止很多push_backs操作。
  2. 在堆上创建数组:如中所述 stackoverflow.com/questions/675817

任何其他建议,我们都会感激!

1 个答案:

答案 0 :(得分:1)

最大的问题是最终维度中的[2000]。只需使其动态。

具有这样的3D阵列:

using arr3d = std::array<std::array<std::array<unsigned int, 25>, 4>, 3>;

,然后是第四维的向量:

std::vector<arr3d> ar;
ar.reserve(N); // for optimization