No change in RAM usage when running c++ program

时间:2015-08-07 02:47:59

标签: c++ memory-management ram

I wrote a simple program trying to see change in memory but there was a none. A straight horizontal line around 20% comes always, whether I run the code or not.

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

Shouldnt memory be allocated for any value of i? And a change in Memory free be shown?

3 个答案:

答案 0 :(得分:2)

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

  1. 编译器优化 - 如果启用编译器优化,则可能确定您的c=1:2:size(m,2) %// The columns we want r=2:2:size(m,1) %// The rows we want bsxfun(@(i,j) m(i,j),r.',c) 指针从未使用过,因此它只会删除m运算符调用;
  2. 操作系统优化 - 堆分配是OS内存管理器业务。它只能在第一次使用内存时分配内存。例如,Windows API new[]方法就是这样;
  3. 您的工具限制 - 内存分配/释放可能太快而无法捕获(基于您的示例);
  4. 内存分配失败 - 如果HeapAlloc值太大,堆管理器可能无法找到此类大小的连续内存块,因此{{1} }运算符将引发i异常,您的程序将被终止。

答案 1 :(得分:2)

可能会发生一些事情......

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

所以,为了消除这些潜在的原因你可以写出这样的东西......

#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个字节。

答案 2 :(得分:-1)

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