1. 程式人生 > >C++ win32和linux獲取系統剩餘記憶體,

C++ win32和linux獲取系統剩餘記憶體,

1使用的是qt ,可以更加自己需要的修改
linux 端使用 cat /proc/meminfo
可以看到
圖片中的MemTotal和MemFree和MemAvailable,是我們最關心的,其中MemFree和MemAvailable,有點區別
linux通過fget和sscanf讀取一行,獲得我們想要的MemAvaiable
2win32使用MEMORYSTATUSEX和GloablMemoryStatusEx讀取,需要標頭檔案windows.h
//windows 記憶體 使用率,檢視剩餘記憶體大小`
unsigned long long getAvailablePhysMemBytes()
{
static unsigned long long size = 0;
#ifdef Q_OS_WIN
if (size == 0) {
MEMORYSTATUSEX memoryInfo;
memoryInfo.dwLength = sizeof(memoryInfo);
GlobalMemoryStatusEx(&memoryInfo);
size = memoryInfo.ullAvailPhys;//)/1024/1024
qDebug()<<“win32 memory available:”;
return size;
}
#else Q_OS_UNIX
char name1[20]; //定義一個char型別的陣列名name有20個元素
unsigned long long MemTotal;
char name2[20];
unsigned long long MemFree;
char name3[20];
unsigned long long MemAvailable;
FILE *fd;
char buff[256];

fd = fopen("/proc/meminfo", "r");
fgets(buff, sizeof(buff), fd);
sscanf(buff, "%s %lu ", name1, &MemTotal);
fgets(buff, sizeof(buff), fd);
sscanf(buff, "%s %lu ", name2, &MemFree);
fgets(buff, sizeof(buff), fd);
sscanf(buff, "%s %lu ", name3, &MemAvailable); //返回的是kb
fgets(buff, sizeof(buff), fd);
fclose(fd);     //關閉檔案fd
qDebug()<<"linux memory available:";
return MemAvailable*1024;

#endif
}