c++ - 为什么分配堆内存比分配栈内存快得多?

标签 c++ performance heap-memory stack-memory

我尝试在堆和栈内存中为 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/

相关文章:

c++ - 在 Android NDK 中使用 C/C++ 加密(Rijndael 密码)

java - 将节点连接到树中的下一个兄弟节点

c - 计算逻辑方程的最佳选择?

C - 如何限制堆中的地址访问?

c++ how-to : import numeric variables from . txt 或 .csv 文件

c++ - mfc 目录选择器?

c++ - "Dependent Name is not a Type",但前缀为 "typename"会导致编译器崩溃

c++ - 哪些属性对于 Point 类更有效?

c++ - 如果/何时回收释放的堆内存?

android - 如何增加android虚拟设备的最大堆大小?