2011-04-05 116 views
6

我想知道如何通過C++(在Windows 7上)獲得我的RAM的大小。獲取RAM系統大小

+2

爲什麼你想知道這一點? – 2011-04-05 14:41:14

回答

3

在Windows上:

typedef BOOL (WINAPI *PGMSE)(LPMEMORYSTATUSEX); 
PGMSE pGMSE = (PGMSE) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), TEXT("GlobalMemoryStatusEx")); 
if (pGMSE != 0) 
{ 
    MEMORYSTATUSEX mi; 
    memset(&mi, 0, sizeof(MEMORYSTATUSEX)); 
    mi.dwLength = sizeof(MEMORYSTATUSEX); 
    if (pGMSE(&mi) == TRUE) 
     os << "RAM: " << mi.ullTotalPhys/1048576 << "MB"; 
    else 
     pGMSE = 0; 
} 
if (pGMSE == 0) 
{ 
    MEMORYSTATUS mi; 
    memset(&mi, 0, sizeof(MEMORYSTATUS)); 
    mi.dwLength = sizeof(MEMORYSTATUS); 
    GlobalMemoryStatus(&mi); 
    os << "RAM: " << mi.dwTotalPhys/1048576 << "MB"; 
} 

在Linux上:

/proc/meminfo

7

使用GetPhysicallyInstalledSystemMemory檢索計算機上物理安裝的內存量

(。注意,這需要Windows Vista SP1或更高版本的功能不可用在早期版本的Windows操作系統)

MSDN上remarks說:

的GetPhysicallyInstalledSystemMemory 功能從 計算機的SMBIOS固件表中檢索物理安裝的RAM的數量 。 這可以從由GlobalMemoryStatusEx 功能,它設置MEMORYSTATUSEX結構 到的物理存儲器的量的ullTotalPhys 構件 可用於操作系統 使用報告的量 不同。可用的內存量 操作系統可以比物理安裝在計算機 的內存量較少 因爲 BIOS和某些驅動程序可以保留 存儲器中作爲I/O區域爲 內存映射設備,使得 內存不可用於運行 系統和應用程序。

由 GetPhysicallyInstalledSystemMemory 功能檢索到的物理存儲器 量必須等於或大於由 GlobalMemoryStatusEx函數報告的量大 ;如果它 更少,則SMBIOS數據格式錯誤 ,並且該功能失敗,並且 ERROR_INVALID_DATA。數據可能表明 用戶的計算機出現問題,SMBIOS 格式錯誤。

這意味着,你也想看看GlobalMemoryStatusEx

5

好的,夥計們!我已經找到了解決方案通過這樣那樣的[在大師模式]:

#define _WIN32_WINNT 0x0501 // I misunderstand that 
#include <windows.h> 
#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 
    MEMORYSTATUSEX statex; 

    statex.dwLength = sizeof (statex); // I misunderstand that 

    GlobalMemoryStatusEx (&statex); 
    cout << "Physical RAM => " << (float)statex.ullTotalPhys/(1024*1024*1024)<< endl; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

我必須定義_WIN32_WINNT 0x0501,但我不知道爲什麼[大師模式關閉。

如果有人能解釋我在做什麼,爲什麼沒有它就無法工作。

一兩件事,那是什麼:

statex.dwLength = sizeof (statex); 
0

0x501是WindowsXP的版本,即MEMORYSTATUSEX結構不被一些較老版本Windows的支持。您的windef.h可能指向比0x5XX更低的WINVER