实时检测你的内存

来源:互联网 发布:招网络主播 编辑:程序博客网 时间:2024/06/05 14:36

     以前总以为windows内存很神秘,可是了解了一些API后,神马都是浮云。微软用页式虚拟存储技术对内存进行管理,利用页面文件(也叫交换文件)来实现物理内存的扩展。所谓页面文件,通俗地说,就是我们设置的虚拟内存--右键点击“我的电脑”,打开“属性”...

     我们用VOID GlobalMemoryStatus ( LPMEMORYSTATUS lpBuffer )来实现内存的检测。当然也可以用别的API,正如有的房子有好几个门,哪个门都能进去...不过这个API比较直观,里面的Memory,你懂的...

     上面这个API函数只有一个参数,参数是一个指向名为MEMORYSTATUS的结构的指针。结构定义:

  typedef struct _MEMORYSTATUS {   DWORD dwLength; // 本结构的长度

  DWORD dwMemoryLoad; // 已用内存的百分比

  DWORD dwTotalPhys; // 物理内存总量

  DWORD dwAvailPhys; // 可用物理内存

  DWORD dwTotalPageFile; // 交换文件总的大小

  DWORD dwAvailPageFile; // 交换文件中空闲部分大小

  DWORD dwTotalVirtual; // 用户总的虚拟地址空间

  DWORD dwAvailVirtual; // 当前空闲的虚拟地址空间

  

 

  } MEMORYSTATUS, *LPMEMORYSTATUS;

     有了这个API,先说明一个MEMORYSTATUS的结构,再使用这个API,就可以检测内存了。但每检测一次,都要运行一次这个检测文件,不方便。循环语句要派上用场了(下面的例程大约10秒检测一次)。

      以下例程VC6.0下通过。

 

#include<windows.h>
#include<stdio.h>
#define DIV 1024
void main(int argc, char *argv[])
{ MEMORYSTATUS memory;
 while(1){
memory.dwLength=sizeof(memory);
GlobalMemoryStatus(&memory);
printf ("总共有物理内存 %ldk/n",
         memory.dwTotalPhys/DIV);
printf("物理内存使用百分之%ld/n",memory.dwMemoryLoad);
printf ("你设置的虚拟内存总共有 %ldk/n",
         memory.dwTotalPageFile/DIV);
printf("虚拟内存剩下%ldk/n/n",memory.dwAvailPageFile/DIV);
Sleep(10000);
}
}