Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 增加数组的大小会产生一些问题_C++ - Fatal编程技术网

C++ 增加数组的大小会产生一些问题

C++ 增加数组的大小会产生一些问题,c++,C++,我试图检查,在CPP中可以创建的最大数组大小是多少。我声明了一个“int”数组,并不断增加数组大小。10^9之后,程序开始崩溃,但大小为5*10^8或更大的数组出现严重错误(即使程序没有崩溃)。使用的代码和问题如下: #include<iostream> int ar[500000000]; int main() { printf("Here\n"); } #包括 国际应收账款[500000000]; int main() { printf(“此处\n”); } 如果数组

我试图检查,在CPP中可以创建的最大数组大小是多少。我声明了一个“int”数组,并不断增加数组大小。10^9之后,程序开始崩溃,但大小为5*10^8或更大的数组出现严重错误(即使程序没有崩溃)。使用的代码和问题如下:

#include<iostream>
int ar[500000000];
int main()
{
    printf("Here\n");
}
#包括
国际应收账款[500000000];
int main()
{
printf(“此处\n”);
}
如果数组大小减小到4*10^8或更小,则上述代码将成功运行。但是,对于大于5*10^8的数组大小,程序会成功运行,但不会打印任何内容,也不会崩溃,也不会给出任何错误或警告

另外,如果数组定义是本地的,那么在相同的限制之后,程序就会崩溃,没有这样的错误。当使用数组的全局定义时,程序不会崩溃,也不会打印任何内容

有人能解释一下这种行为的原因吗。我知道不同机器的阵列大小会有所不同


我有1.2GB的空闲内存。如何创建大小为4*10^8的本地整数数组。这需要大约1.49GB,而我没有那么多的空闲RAM。

真正的问题是:为什么要使用globals?更糟糕的是,它是一个静态原始数组

如前所述,用于保存全局变量的内存正在溢出(它可能写入了
“Here\n”
字符串)

如果您确实需要这么大的阵列,请使用动态分配的内存:

int main() {
   int* bigArray = new int[500000000];
   // ... use bigArray here
   delete[] bigArray;
}

C++本身并不限制数组大小的最大限制。在这种情况下,因为它是一个全局变量,所以它也将位于堆栈之外。我唯一能想到的就是你机器上的内存限制。你的机器有多少内存?运行程序前有多少内存可用?

阵列的最大大小取决于您的计算机有多少内存。程序崩溃是因为没有足够的内存(在堆栈上)进行分配!阵列的大小取决于硬件。这其实没那么大。你可以在任何东西上运行,一台相机、一个咖啡壶芯片、一台超级计算机,所以我们需要更多的信息来回答。@mikhailvs它是一个全局变量,不会在堆栈上创建。你为什么需要知道呢?@mikhailvs我知道它依赖于实现,但它是一个幼稚的实现,可以将全局数组粘贴到堆栈上。有什么好处?应该改用
unique\ptr
<代码>标准::唯一性(新整数[500000000])或仅使用std::vector
std::vector array(500000000,0)
由于unique_ptr可能无法使用大尺寸的本地数组,因此程序会崩溃,如果程序成功运行,它也会正常运行。但是使用全局数组,即使程序没有崩溃,代码也不会按预期运行。这是因为局部数组位于堆栈上,比全局变量的面积更小。new/malloc放在堆上,这是程序可用的最大区域。@ildjarn这与生成的机器代码的轻量级无关,而是与专注于给定主题的答案的轻量级有关。答案并不鼓励不好的做法,因为代码片段并不打算按原样复制,而是作为所描述方向的演示。读者在什么方面具体遵循这个方向取决于他。这不是问题和答案的一部分。虽然我知道关于使用智能指针的一点注释对初学者有好处,但它不适合代码示例。