Q: How to get the amount of physical (RAM) memory?
A: By calling GlobalMemoryStatus or GlobalMemoryStatusEx.
Example
Using GlobalMemoryStatus.
ExampleCode:#include <windows.h> #include <stdio.h> DWORD GetTotalPhysicalMemory() { MEMORYSTATUS memStatus = {0}; ::GlobalMemoryStatus(&memStatus); return memStatus.dwTotalPhys; } int main() { const DWORD dwMBFactor = 0x00100000; DWORD dwTotalPhys = GetTotalPhysicalMemory(); printf("Total physical memory: %u MB", dwTotalPhys / dwMBFactor); system("pause"); return 0; }
Usig GlobalMemoryStatusEx
NotesCode:#include <windows.h> #include <stdio.h> DWORDLONG GetTotalPhysicalMemory() { MEMORYSTATUSEX memStatusEx = {0}; memStatusEx.dwLength = sizeof(MEMORYSTATUSEX); BOOL bRet = ::GlobalMemoryStatusEx(&memStatusEx); return memStatusEx.ullTotalPhys; } int main() { const DWORD dwMBFactor = 0x00100000; DWORDLONG dwTotalPhys = GetTotalPhysicalMemory(); printf("Total physical memory: %u MB", dwTotalPhys / dwMBFactor); system("pause"); return 0; }
- GlobalMemoryStatusEx must be preferred because:
- GlobalMemoryStatus function will return the correct amount of physical memory between 2 and 4 GB only if the executable is linked using the /LARGEADDRESSAWARE linker option.
- GlobalMemoryStatus returns -1 (indicates an overflow) on computers with more than 4 GB of memory.
Related links


Reply With Quote
