Windows - 程序使用了多少内存是没有意义的

Windows - How many memory the program is using makes no sense

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

代码

 #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 来获取它。

微软定义:

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

我从字节传递到千字节然后我执行程序我得到这个:

输出

  1. 1974.27 kb
  2. 2027.52 kb
  3. 2035.71 kb

这个程序对我来说毫无意义:

  1. 几乎 2 MB 的内存用于一个什么都不做的程序?
  2. 分配了 100 kb 的内存,但程序只多使用了 67 kb。
  3. 如果我释放了内存,为什么它会长大。

也许我不明白这个函数在做什么,所以有人可以解释一下发生了什么吗?

谢谢!

它是 :

的总和
  • 执行文件的大小
  • stack memory 你的程序占用你程序中使用的静态变量的内存
  • heap memory 你的程序取一个动态变量的内存
  • 以及程序中使用的库的大小。

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