C++11 数组二维最大大小(以C+为单位)+;

C++11 数组二维最大大小(以C+为单位)+;,c++11,C++11,我想执行3维和2维的大型计算程序,大小为数组[40000][40000]或更大,这段代码可以稍微解释一下我的问题,我注释vector,因为它在运行时有相同的问题,它会进入vector的lib,程序运行时如何增加编译器的内存或删除(清理)它的某些部分 #include<iostream> #include<cstdlib> #include<vector> using namespace std; int main(){ float array[4000

我想执行3维和2维的大型计算程序,大小为
数组[40000][40000]
或更大,这段代码可以稍微解释一下我的问题,我注释vector,因为它在运行时有相同的问题,它会进入vector的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;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
浮点数组[40000][40000];
//矢量<矢量>阵列(10001000);

cout比
vector
(也比vector-of-vector1好得多)稍微好一点的选项,它与
vector
一样,对内容使用动态分配(因此不会溢出堆栈),但不需要调整大小:

std::unique_ptr<float[][40000]> array{ new float[40000][40000] };
std::unique_ptr数组{new float[40000][40000]};
方便的是,
float[40000][40000]
仍然出现,这使得即使对于不熟悉不完整数组类型的程序员来说,这里发生的事情也相当明显



1
vector
非常糟糕,因为它将有许多不同的分配,所有分配都必须单独初始化,并且生成的存储将是不连续的。稍微好一点的是将
vector
vector
组合,后者将创建的指针存储在一个大的缓冲区中被前者老化。

一个比
vector
稍好的选项(比vector-of-vector1好得多),它与
vector
一样,对内容使用动态分配(因此不会溢出堆栈),但不需要调整大小:

std::unique_ptr<float[][40000]> array{ new float[40000][40000] };
std::unique_ptr数组{new float[40000][40000]};
方便的是,
float[40000][40000]
仍然出现,这使得即使对于不熟悉不完整数组类型的程序员来说,这里发生的事情也相当明显



1
vector
非常糟糕,因为它将有许多不同的分配,所有分配都必须单独初始化,并且生成的存储将是不连续的。稍微好一点的是将
vector
vector
组合,后者将创建的指针存储在一个大的缓冲区中由前者老化。

本地变量(包括数组)通常放在堆栈上。堆栈是一种有限的资源,在使用Visual Studio编译器的Windows上,默认堆栈大小为单兆字节。您的数组(假设四字节
浮点
)几乎为6GB(40000*40000*4)。解决方法是使用向量,那么你为什么要把它注释掉呢?也许你所需要的只是?特别是?假设你有足够的内存。请你再解释一下你的问题(除了太大的数组)好吗?“因为它有同样的问题”不,这是一个不同的问题。如何增加编译器的内存?你可以考虑使用内存映射文件。或者,如果你的数据是稀疏的,映射容器。包括数组在内的局部变量通常放在堆栈上。堆栈是一个有限的资源,在Windows上使用VisualStudio编译器,默认堆栈大小是一个兆字节。ur数组(假设四字节<代码>浮点)几乎是6千兆字节(40000*40000*4)。解决方案是使用向量,那么你为什么要注释掉它?也许你所需要的只是?特别是?假设你有足够的内存。请你再解释一下你的问题(除了太大的数组)好吗?“因为它有同样的问题”不,这是一个不同的问题。如何增加编译器的内存?你可以考虑使用内存映射文件。或者,如果你的数据是稀疏的,映射容器。它不是<代码> AutoBigyLabase= STD::MaxIOLION(40000)。在一个完整的表达式中有多个分配的情况下,“代码> > MaxIOxION/Obj>有优势。在这个例子中,没有代码的优点:MaxIOxION:/CODE >。而且我认为语法在OP的技术水平上对读者来说不太清楚。难道不是代码> AutoBigyReals= STD::MaxIOxIOLL(40000)吗?甚至?@ Bbji::Case> MaxIOxION/<代码>在一个完整的表达式中有多个分配时具有优势。在这个例子中,对于<代码> MaxiOngult没有任何好处。