我想知道如何通過C++(在Windows 7上)獲得我的RAM的大小。獲取RAM系統大小
回答
你想使用GlobalMemoryStatusEx,它返回MEMORYSTATUSEX。你想要的字段叫做ullTotalPhys。
在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
。
使用GetPhysicallyInstalledSystemMemory
檢索計算機上物理安裝的內存量。
(。注意,這需要Windows Vista SP1或更高版本的功能不可用在早期版本的Windows操作系統)
MSDN上remarks說:
的GetPhysicallyInstalledSystemMemory 功能從 計算機的SMBIOS固件表中檢索物理安裝的RAM的數量 。 這可以從由GlobalMemoryStatusEx 功能,它設置MEMORYSTATUSEX結構 到的物理存儲器的量的ullTotalPhys 構件 可用於操作系統 使用報告的量 不同。可用的內存量 操作系統可以比物理安裝在計算機 的內存量較少 因爲 BIOS和某些驅動程序可以保留 存儲器中作爲I/O區域爲 內存映射設備,使得 內存不可用於運行 系統和應用程序。
由 GetPhysicallyInstalledSystemMemory 功能檢索到的物理存儲器 量必須等於或大於由 GlobalMemoryStatusEx函數報告的量大 ;如果它 更少,則SMBIOS數據格式錯誤 ,並且該功能失敗,並且 ERROR_INVALID_DATA。數據可能表明 用戶的計算機出現問題,SMBIOS 格式錯誤。
這意味着,你也想看看GlobalMemoryStatusEx
。
好的,夥計們!我已經找到了解決方案通過這樣那樣的[在大師模式]:
#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);
的0x501
是WindowsXP的版本,即MEMORYSTATUSEX
結構不被一些較老版本Windows的支持。您的windef.h可能指向比0x5XX
更低的WINVER
。
- 1. 如何使用Java獲取Ram大小和硬盤大小?
- 2. 獲取系統
- 3. 操作系統如何獲取正確的ico/favicon大小?
- 4. malloc分配的大小取決於RAM?
- 5. 文件系統塊大小
- 6. 在C,linux中獲取RAM大小,非精確結果
- 7. 獲取android系統
- 8. RAM大小和虛擬內存之間的關係與JVM堆大小
- 9. Infinispan:存儲大對象> RAM大小?
- 10. 排序數據大於RAM大小
- 11. 僅在RAM中使用mlock的系統
- 12. 通過Java查找系統RAM
- 13. Motorola 68k內存系統:Ram vs Rom
- 14. 操作系統文件系統塊大小?
- 15. 優化嵌入式linux系統的根文件系統大小
- 16. 使用java獲取系統信息,即圖形卡,cpu,ram等使用java
- 17. 指針相對於RAM的大小,體系結構
- 18. Windows XP 32位操作系統會讀取8GB的RAM嗎?
- 19. PHP內存限制取決於系統的硬盤或RAM?
- 20. 獲取系統根目錄?
- 21. 獲取系統音量iOS
- 22. 如何獲取系統ioWait
- 23. 獲取系統日期ddmmyyyy
- 24. 獲取系統圖標
- 25. 獲取共享android系統
- 26. 獲取系統區域
- 27. 獲取系統調用
- 28. 獲取系統字體
- 29. 從系統獲取XML()
- 30. 獲取安裝在系統
爲什麼你想知道這一點? – 2011-04-05 14:41:14