Windows系统CPU内存网络性能统计

本文介绍了如何使用GlobalMemoryStatus和GlobalMemoryStatusEx函数获取Windows系统内存使用情况,包括内存使用率、物理内存大小等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《第一篇 内存》


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


void WINAPIGlobalMemoryStatus(


    __out         LPMEMORYSTATUS lpBuffer


);


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


[cpp] view plaincopyprint?// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus   
//By MoreWindows-(http://blog.youkuaiyun.com/MoreWindows)   
#include <stdio.h>   
#include <windows.h>   
const int KB_DIV = 1024;  
const int MB_DIV = 1024 * 1024;  
int main()  
{  
    printf("    Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus\n");        
    printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n");   
  
    MEMORYSTATUS memStatus;  
    GlobalMemoryStatus(&memStatus);  
      
  
    printf ("当前内存使用率: %d%%\n", memStatus.dwMemoryLoad);  
  
    printf ("系统物理内存总量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV);  
    printf ("当前可用物理内存: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV);  
      
    printf ("系统虚拟内存总量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV);  
    printf ("当前空闲虚拟内存: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV);  
  
    printf ("系统页面文件总量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV);  
    printf ("当前空闲页面文件: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV);  
    return 0;  
}  


// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus
//By MoreWindows-(http://blog.youkuaiyun.com/MoreWindows)
#include <stdio.h>
#include <windows.h>
const int KB_DIV = 1024;
const int MB_DIV = 1024 * 1024;
int main()
{
printf("    Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus\n");      
printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n"); 


MEMORYSTATUS memStatus;
GlobalMemoryStatus(&memStatus);



printf ("当前内存使用率: %d%%\n", memStatus.dwMemoryLoad);


printf ("系统物理内存总量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV);
printf ("当前可用物理内存: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV);

printf ("系统虚拟内存总量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV);
printf ("当前空闲虚拟内存: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV);


printf ("系统页面文件总量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV);
printf ("当前空闲页面文件: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV);
return 0;
}在本机上运行结果如下,呵呵,2G内存对XP系统来说还是很够用的。换成Win7肯定不会有这么可用内存。


 


 


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


BOOLWINAPIGlobalMemoryStatusEx(


    __in_out      LPMEMORYSTATUSEXlpBuffer


);


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


[cpp] view plaincopyprint?// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx   
//By MoreWindows-(http://blog.youkuaiyun.com/MoreWindows)   
#include <stdio.h>   
#include <windows.h>   
  
const int KB_DIV = 1024;  
const int MB_DIV = 1024 * 1024;  
  
  
int main()  
{  
    printf("    Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx\n");        
    printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n");   
  
    MEMORYSTATUSEX memStatusEx;   
    memStatusEx.dwLength = sizeof(memStatusEx);  
    if (GlobalMemoryStatusEx(&memStatusEx))  
    {  
        printf ("当前内存使用率: %d%%\n", memStatusEx.dwMemoryLoad);  
  
        printf ("系统物理内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV);  
        printf ("当前可用物理内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV);  
  
        printf ("系统虚拟内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV);  
        printf ("当前空闲虚拟内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV);  
  
        printf ("系统页面文件总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV);  
        printf ("当前空闲页面文件: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV);  
    }  
    return 0;  
}  


// Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx
//By MoreWindows-(http://blog.youkuaiyun.com/MoreWindows)
#include <stdio.h>
#include <windows.h>


const int KB_DIV = 1024;
const int MB_DIV = 1024 * 1024;




int main()
{
printf("    Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx\n");      
printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n"); 


MEMORYSTATUSEX memStatusEx; 
memStatusEx.dwLength = sizeof(memStatusEx);
if (GlobalMemoryStatusEx(&memStatusEx))
{
printf ("当前内存使用率: %d%%\n", memStatusEx.dwMemoryLoad);


printf ("系统物理内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV);
printf ("当前可用物理内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV);


printf ("系统虚拟内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV);
printf ("当前空闲虚拟内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV);


printf ("系统页面文件总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV);
printf ("当前空闲页面文件: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV);
}
return 0;
}运行结果如下:


 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值