运行 c++ 程序时 RAM 使用没有变化

No change in RAM usage when running c++ program

我写了一个简单的程序试图查看内存中的变化,但是有 none。无论我是否 运行 代码,总是会出现大约 20% 左右的水平直线。

#include<iostream>
using namespace std;
int main()
{
       int *m;
       int i;
       cin>>i;
       m = new int[i];
}

是否应该为 i 的任何值分配内存?并显示内存中的变化?

您为 int 的最大大小分配了内存。那是4个字节。现在假设您的 RAM 有 8 GB。 4 个字节大约是 8 GB RAM 的 0.00000005%。

发生这种情况的原因可能有很多:

  1. 编译器优化 - 如果您打开编译器优化,它可能会确定您的 m 指针从未被使用,因此它会简单地删除 new[]接线员呼叫;
  2. 操作系统优化 - 堆分配是 OS 内存管理器业务。它只能在第一次内存使用时分配内存。例如 Windows API HeapAlloc 方法就是这样;
  3. 您的工具限制 - 内存 allocation/deallocation 可能太快而无法捕捉(基于您的示例);
  4. 内存分配失败 - 如果你的i值太大,堆管理器可能无法找到这样大小的连续内存块,所以 new 运算符将引发 bad_alloc 异常并且您的程序将被终止。

可能会发生很多事情...

  • 编译器 编译器可能正在优化内存分配(因为实际上什么也没做)
  • 操作系统操作系统可能未分配内存,因为页面未写入
  • 采样资源使用情况可能不会显示在您的系统监视器上,因为您的程序在分配内存后立即退出

因此,要消除这些潜在原因,您可以编写如下内容...

#include <iostream>

int main(int argc, char* argv[]) {

  int x,y;

  std::cin >> x;

  int* m = new int[x];

  for (int i = 0; i < x; i++)
    m[i] = i;

  std::cin >> y;

  std::cout << m[y] << std::endl;

  return 0;
}

然后,您应该能够在输入 y 值之前检查内存使用情况。我不确定您使用的是什么操作系统,但您应该会看到图像大小和程序的驻留内存大致增加 4x 字节。