复数双精度数组的最大大小是多少? 在C++中,一维复复数数组的最大大小是什么?(即 STD::复杂数组[维数] < /COD>) 如果我在main和global中声明数组,那么最大大小是否有差异?

复数双精度数组的最大大小是多少? 在C++中,一维复复数数组的最大大小是什么?(即 STD::复杂数组[维数] < /COD>) 如果我在main和global中声明数组,那么最大大小是否有差异?,c++,arrays,C++,Arrays,数组的最大大小将是M/sizeof(std::complex)字节,其中M是剩余的可用内存(以字节为单位)。可用内存量受总内存量和用于其他目的的内存量的影响 如果将数组声明为自动变量,则它将具有自动存储。在大多数系统上,自动存储的数量是有限的。所有自动变量共享的典型总自动存储是1兆或几兆。这取决于从操作系统分配的软件堆栈大小、体系结构和RAM大小。基本上是std::min(堆栈大小,2^体系结构-1,Ram大小)/sizeof(std::complex)。全局和局部都在堆栈上初始化。但如果将其创

数组的最大大小将是
M/sizeof(std::complex)
字节,其中
M
是剩余的可用内存(以字节为单位)。可用内存量受总内存量和用于其他目的的内存量的影响


如果将数组声明为自动变量,则它将具有自动存储。在大多数系统上,自动存储的数量是有限的。所有自动变量共享的典型总自动存储是1兆或几兆。

这取决于从操作系统分配的软件堆栈大小、体系结构和RAM大小。基本上是std::min(堆栈大小,2^体系结构-1,Ram大小)/sizeof(std::complex)。全局和局部都在堆栈上初始化。但如果将其创建为动态堆对象,则有一个区别。全局数组可能非常庞大。它的大小不受自动存储限制。但是一个全局数组也是完全免费的。在一个复杂的程序中,很难跟踪谁在处理全局变量,因为每个人都可以。这很快就会变成一场调试噩梦。取而代之的是使用
std::vector
,并尽可能缩小其范围。@FabianKeßler globals通常不会出现在堆栈上。一些关于去哪里的阅读:。值得注意的是,链接文档中完全没有术语“堆栈”和“堆”。堆栈和堆是C++不关心的实现细节。只要满足要求,您就可以使用仓鼠轮和精灵灰尘进行存储。
M
的值不仅仅取决于可用内存。在某些虚拟内存系统上,可用的交换量可能会影响阵列的最大可能大小(性能折衷是,作用于该阵列元素的速度可能非常慢,因为它们在硬盘驱动器等速度较慢的设备上表示,访问阵列元素可能会在内存和交换文件之间交换).