Windows系统CPU内存网络性能统计第一篇 内存

目录如下:

1.《Windows系统CPU内存网络性能统计第一篇 内存》

2.《 Windows系统 CPU内存网络性能统计第二篇 CPU》

3.《 Windows系统 CPU内存网络性能统计第三篇网络流量》

 

本篇将介绍统计系统内存使用情况,包括内存使用率、总物理内存大小、可用物理内存大小、总虚拟内存大小,可用虚拟内存大小等等。统计系统内存使用情况是非常简单的,直接使用 GlobalMemoryStatus函数进行查询就可以了。其函数原型如下:

void WINAPI GlobalMemoryStatus (

    __out          LPMEMORYSTATUS lpBuffer

);

这个函数将传出 MEMORYSTATUS类型的结构体,该结构体就描述了系统中内存的使用情况。详细可以见代码:

1// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus 2//By MoreWindows-(http://blog.csdn.net/MoreWindows) 3#include <stdio.h> 4#include <windows.h> 5const int KB_DIV = 1024; 6const int MB_DIV = 1024 * 1024; 7int main() 8{ 9 printf(" Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus\n"); 10 printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); 11 12 MEMORYSTATUS memStatus; 13 GlobalMemoryStatus(&memStatus); 14 15 16 printf ("当前内存使用率: %d%%\n", memStatus.dwMemoryLoad); 17 18 printf ("系统物理内存总量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV); 19 printf ("当前可用物理内存: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV); 20 21 printf ("系统虚拟内存总量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV); 22 printf ("当前空闲虚拟内存: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV); 23 24 printf ("系统页面文件总量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV); 25 printf ("当前空闲页面文件: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV); 26 return 0; 27} 28

在本机上运行结果如下,呵呵, 2G内存对 XP系统来说还是很够用的。换成 Win7肯定不会有这么可用内存。

 

 

由于 MEMORYSTATUS结构体对于内存大小是用 DWORD来存储的, DWORD只有 4个字节,最大为 4G。因此当系统的内存大于 4GB时肯定会产生一些问题的。因此 Windows系统提供了另一个函数—— GlobalMemoryStatusEx,其函数原型如下:

BOOL WINAPI GlobalMemoryStatusEx (

    __in_out       LPMEMORYSTATUSEX lpBuffer

);

这个函数即前面的 GlobalMemoryStatus函数的增强版。它将传出 MEMORYSTATUSEX类型的结构体,这个结构体会使用 DWORDLONG类型的变量来描述内存的大小, DWORDLONG与 __int64类似,占 8字节。下面也给出使用 GlobalMemoryStatusEx函数来统计内存信息的源代码:

1// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx 2//By MoreWindows-(http://blog.csdn.net/MoreWindows) 3#include <stdio.h> 4#include <windows.h> 5 6const int KB_DIV = 1024; 7const int MB_DIV = 1024 * 1024; 8 9 10int main() 11{ 12 printf(" Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx\n"); 13 printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); 14 15 MEMORYSTATUSEX memStatusEx; 16 memStatusEx.dwLength = sizeof(memStatusEx); 17 if (GlobalMemoryStatusEx(&memStatusEx)) 18 { 19 printf ("当前内存使用率: %d%%\n", memStatusEx.dwMemoryLoad); 20 21 printf ("系统物理内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV); 22 printf ("当前可用物理内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV); 23 24 printf ("系统虚拟内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV); 25 printf ("当前空闲虚拟内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV); 26 27 printf ("系统页面文件总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV); 28 printf ("当前空闲页面文件: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV); 29 } 30 return 0; 31} 32

运行结果如下:

 

 

 

本篇文章介绍和示范了 GlobalMemoryStatus和 GlobalMemoryStatusEx函数来查询内存使用情况。下面二篇《 Windows系统 CPU内存网络性能统计第二篇 CPU》和《 Windows系统 CPU内存网络性能统计第三篇 网络流量》将分别介绍查询 CPU使用情况和网络流量统计,欢迎继续浏览。

 

 

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8459219

 

 

 

 

代码交流 2021