C++大型多维数组堆栈[复制]

vnzz0bqm  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(99)

此问题在此处已有答案

Stack Overflow Exception when declaring multidimensional arrays(3个答案)
stack overflow error in C++ program(2个答案)
Maximum size of local array variable(4个回答)
Getting a stack overflow exception when declaring a large array(7个回答)
Segmentation fault on large array sizes(7个回答)
5年前关闭。
我的模拟试图预测系统在很长一段时间内的需求.
数组的大小将是25 x4 x3 x20000,我需要它至少是一个(无符号整数),但我知道堆栈不能处理这个数据量。

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

字符串
我一直在四处寻找,并找到了不同的解决方案。然而,我仍然没有决定实施哪一个。所以我的问题是:哪一个在性能和良好实践方面更好:
1.**使用数组的向量:**如stackoverflow.com/questions/18991765中所述.但如何转换为4D维度有什么想法吗?
第一个月
1.使用4D vector和push_back():我没有使用这个,因为我知道数组的最终大小,我想防止许多push_backs操作。
1.在堆上创建数组:如stackoverflow.com/questions/675817所述
任何其他建议都很感激!

xqnpmsa8

xqnpmsa81#

最大的问题是最后一个维度的[2000]。只是让它成为动态的。
让你的3D数组像这样:

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

字符串
然后是第四维的向量:

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

相关问题