// Windows/System.cpp #include "StdAfx.h" #include "../Common/Defs.h" #include "System.h" namespace NWindows { namespace NSystem { UInt32 GetNumberOfProcessors() { SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); return (UInt32)systemInfo.dwNumberOfProcessors; } #ifndef UNDER_CE #if !defined(_WIN64) && defined(__GNUC__) typedef struct _MY_MEMORYSTATUSEX { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG ullTotalPhys; DWORDLONG ullAvailPhys; DWORDLONG ullTotalPageFile; DWORDLONG ullAvailPageFile; DWORDLONG ullTotalVirtual; DWORDLONG ullAvailVirtual; DWORDLONG ullAvailExtendedVirtual; } MY_MEMORYSTATUSEX, *MY_LPMEMORYSTATUSEX; #else #define MY_MEMORYSTATUSEX MEMORYSTATUSEX #define MY_LPMEMORYSTATUSEX LPMEMORYSTATUSEX #endif typedef BOOL (WINAPI *GlobalMemoryStatusExP)(MY_LPMEMORYSTATUSEX lpBuffer); #endif UInt64 GetRamSize() { #ifndef UNDER_CE MY_MEMORYSTATUSEX stat; stat.dwLength = sizeof(stat); #endif #ifdef _WIN64 if (!::GlobalMemoryStatusEx(&stat)) return 0; return MyMin(stat.ullTotalVirtual, stat.ullTotalPhys); #else #ifndef UNDER_CE GlobalMemoryStatusExP globalMemoryStatusEx = (GlobalMemoryStatusExP) ::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")), "GlobalMemoryStatusEx"); if (globalMemoryStatusEx != 0 && globalMemoryStatusEx(&stat)) return MyMin(stat.ullTotalVirtual, stat.ullTotalPhys); #endif { MEMORYSTATUS stat; stat.dwLength = sizeof(stat); ::GlobalMemoryStatus(&stat); return MyMin(stat.dwTotalVirtual, stat.dwTotalPhys); } #endif } }}