我尝试在堆和栈内存中为 10^7 个整数分配空间,看看哪个更快。显然在堆内存中分配要快得多,但我不明白原因。
#include <bits/stdc++.h>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
high_resolution_clock::time_point t1 = high_resolution_clock::now();
int *p = new int[1e7];
high_resolution_clock::time_point t2 = high_resolution_clock::now();
auto duration = duration_cast<microseconds>( t2 - t1 ).count();
cout << duration / 1e6 << "\n"; // 5e-06
t1 = high_resolution_clock::now();
vector<int> v(1e7);
t2 = high_resolution_clock::now();
duration = duration_cast<microseconds>( t2 - t1 ).count();
cout << duration / 1e6 << "\n"; // 0.112284
return 0;
}
最佳答案
new int[1e7]
为 1e7 int
分配空间值并且不初始化它们。
vector<int> v(1e7);
创建一个 vector<int>
堆栈上的对象,该对象的构造函数为 1e7 int
分配空间堆上的值。它还初始化每个 int
值为 0。
速度上的差异是因为初始化。
为了比较堆栈分配的速度,您需要在堆栈上分配一个数组:
int data[1e7];
但要注意:这很有可能会失败,因为堆栈不够大,无法容纳那么大的数组。
关于c++ - 为什么分配堆内存比分配栈内存快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273877/