当我在Devcpp编译器中运行此代码时->
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> vec;
for(int i=0;i<100000000;i++)
vec.push_back(i);
}
它甚至可以在运行时运行。
但是当我运行->
#include<bits/stdc++.h>
using namespace std;
int arr[1000000000];
int main()
{
return 0;
}
它给我链接错误。
只要需要空间,arr和vec都需要相同的空间,那么为什么vec代码在运行时可以运行得很好,但是arr代码甚至不能编译。
最佳答案
问题在于分配。在第一种情况下, std::vector
默认allocator使用动态分配,原则上它可以分配所需的内存(当然受操作系统和物理内存量的限制),而在第二种情况下,它使用可用于静态分配的内存(从技术上讲,数组具有static storage duration),在您的情况下,它小于1000000000 * sizeof int
字节。有关C程序中的各种分配类型的好答案,请参见this(这也适用于C++)。
顺便说一句,请避免使用#include<bits/stdc++.h>
,因为它是非标准的。仅包括所需的标准 header 。另一个问题:我不认为您会遇到编译时错误,您可能会遇到运行时错误。换句话说,代码可以很好地编译,但是无法运行。
关于c++ - 数组和 vector 之间的差异与最大大小有关?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35138451/