win 32Api获取系统内存函数

来源:互联网 发布:linux运维会被云取代吗 编辑:程序博客网 时间:2024/05/18 11:09


windows编程中 获取系统内存信息有2个api,分别是GlobalMemoryStatus和GlobalMemoryStatusEx,GlobalMemoryStatus函数可以在C语言咧直接调用,但是GlobalMemoryStatusEx却不可以直接调用,因为GlobalMemoryStatusEx被写在了系统的kernel32.dll动态链接库里面,所以我们在使用GlobalMemoryStatusEx要加载kernel32.dll库


2个函数的不同点:

总的来说这2个函数都可以获取到内存信息,但是GlobalMemoryStatusEx函数是GlobalMemoryStatus函数的增强,GlobalMemoryStatus虽然可以获取,但当你的机器里装了2条内存条是,她只能获取到一条的内存信息容量,而GlobalMemoryStatusEx函数却可以获取到所有,只要你系统识别的内存大小

1、GlobalMemoryStatus函数的用法:

引用头文件#include <windows.h>

MEMORYSTATUS CMemoryFunction::GetMemoryStatus(){MEMORYSTATUS status;//定义存放内存信息的变量GlobalMemoryStatus(&status);//调用GlobalMemoryStatus函数获取内存信息 SIZE_T phyPart = status.dwTotalPhys/1000/1000;std::cout<<"PartPhysMemory:"<<phyPart<<"M"<<std::endl;return status;}

2、GlobalMemoryStatusEx函数的用法:

typedef   void(WINAPI*   FunctionGlobalMemoryStatusEx)(LPMEMORYSTATUSEX);//声明函数原型指针MEMORYSTATUSEX CMemoryFunction::GetMemoryStatusEx(){HMODULE hModule;FunctionGlobalMemoryStatusEx GlobalMemoryStatusEx;MEMORYSTATUSEX status;status.dwLength = sizeof(status);LPCWSTR dllName = L"kernel32.dll";hModule = LoadLibrary(dllName);//载入动态链接库kernel32.dll,返回它的句柄if(NULL==hModule)//判断载入dll是否成功{return status;}//在kernel32.dll句柄里查找GlobalMemoryStatusEx函数,返回改函数的指针GlobalMemoryStatusEx   =(FunctionGlobalMemoryStatusEx)GetProcAddress(hModule,"GlobalMemoryStatusEx");if(NULL==GlobalMemoryStatusEx)//判断函数是否找到{return status;}GlobalMemoryStatusEx(&status);//调用函数取得系统的内存情况FreeLibrary(hModule);//释放链接库句柄DWORDLONG phyAll = status.ullTotalPhys/1000/1000;std::cout<<"AllPhysMemory:"<<phyAll<<"M"<<std::endl;return status;}


本机运行结果





0 0