当我在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/

10-11 15:33