Windows - 程序使用多少内存毫无意义

时间:2015-02-14 22:41:15

标签: c windows winapi

我想知道如何知道我的程序实时使用了多少内存。我在win32中找到了PrintMemoryInfo()函数,我试图实现它。

CODE

 #include <windows.h>
    #include <stdio.h>
    #include <psapi.h>

size_t PrintMemoryInfo()
{
  PROCESS_MEMORY_COUNTERS info;
    GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
    return (size_t)info.WorkingSetSize;
}
inline void printIt(){
  double memory = (double)PrintMemoryInfo() * 0.001;
   printf("%.2f kb\n",memory);
}

int main( void )
{
  printIt();
  char *i =(char*)malloc(100000);
  printIt();
  free(i);
  printIt();
  return 0;

PROCESS_MEMORY_COUNTERS包含流程的内存统计信息,GetProcessMemoryInfo填写数据。我需要知道程序使用的实际内存大小,所以我使用WorkingSetSize来获取它。

Microsoft定义:

WorkingSetSize     当前工作集大小,以字节为单位。

我从字节传递到千字节,并且我执行程序我得到了这个:

输出

  1. 1974.27 kb
  2. 2027.52 kb
  3. 2035.71 kb
  4. 这个程序对我来说毫无意义:

    1. 程序什么都不做,差不多有2 MB的内存?
    2. 分配了100 kb的内存,但该程序仅使用了67 kb。
    3. 如果我释放了记忆,为什么会长大。
    4. 也许我没有得到这些功能正在做的事情,所以有人可以解释一下发生了什么事吗?

      谢谢!

1 个答案:

答案 0 :(得分:0)

它是:

的总和
  • 执行文件的大小
  • 堆叠内存,程序占用程序中使用的静态变量
  • 您的程序采用动态变量的堆内存内存
  • 和程序中使用的库的大小。

编程alloc更多内存,用于构造代码。