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

C++ large multidimensional-arrays on stack

本文关键字:数组 大型 C++ 堆栈      更新时间:2023-10-16

我的模拟试图预测很长一段时间对系统的需求......输出结果是一个非常大的 4D 数组(我使用 4 维来最大限度地减少将数据写入数组时出错的机会,即我可以通过这种方式更好地理解它!

数组大小将为 25x4x3x20000,我需要它至少是一个(无符号的 int(,但我知道堆栈无法处理这么多数据。

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

任何其他建议不胜感激!

最大的问题是[2000]在最终维度上。只要让它充满活力。

让您的 3D 阵列如下:

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

然后是第四维的向量:

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