当我在我的Devcpp编译器中运行此代码时 - >
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> vec;
for(int i=0;i<100000000;i++)
vec.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)
它甚至可以在运行时工作.但是当我跑 - >
#include<bits/stdc++.h>
using namespace std;
int arr[1000000000];
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给了我链接错误.
只要空间是必需的,arr和vec都需要相同的空间.那么为什么vec代码在运行时运行得很好但是arr代码甚至都没有编译.
问题在于分配.在第一种情况下,std::vector默认分配器使用动态分配,原则上可以根据需要分配尽可能多的内存(当然由操作系统和物理内存量限制),而在第二种情况下,它使用可用于静态分配的内存(从技术上讲,该数组具有静态存储持续时间),在您的情况下小于1000000000 * sizeof int字节.有关C程序中各种类型的分配(也适用于C++)的详细解答,请参阅此内容.
顺便说一句,避免#include<bits/stdc++.h>,因为它是非标准的.仅包含您需要的标准标头.还有一个问题:我认为你没有得到编译时错误,你可能会遇到运行时错误.换句话说,代码编译得很好,但无法运行.