我想执行大小为array[40000][40000]
或更多的3维和2维大型计算程序,这段代码可以解释我的问题,我评论向量,因为它在运行时有同样的问题它转到向量的lib,如何在程序运行时增加编译器的内存或删除(清理)它的某些部分?
#include<iostream>
#include<cstdlib>
#include<vector>
using namespace std;
int main(){
float array[40000][40000];
//vector< vector<double> > array(1000,1000);
cout<<"bingo"<<endl;
return 0;
}
答案 0 :(得分:2)
比vector
稍好一些选项(并且比矢量矢量 1 好得多),它与vector
一样,使用动态分配内容(因此没有溢出堆栈),但没有邀请调整大小:
std::unique_ptr<float[][40000]> array{ new float[40000][40000] };
方便的是,float[40000][40000]
仍然出现,这使得即使对于不熟悉不完整数组类型的程序员来说也很明显。
1 vector<vector<T> >
非常糟糕,因为它会有许多不同的分配,所有分配都必须单独初始化,并且生成的存储将是不连续的。稍微好一点的是vector<T>
与vector<T*>
的组合,后者将指针创建一行分隔成由前者管理的单个大缓冲区。