| |
| |
| |
|
|
| #ifdef _WIN32 |
| #include <windows.h> |
| |
| #include <sysinfoapi.h> |
| #else |
| #include <sys/types.h> |
| #include <unistd.h> |
| #if defined(__APPLE__) || defined(__FreeBSD__) |
| #include <sys/sysctl.h> |
| #elif defined(__linux__) |
| #include <sys/sysinfo.h> |
| #endif |
| #endif |
|
|
| #include "common/memory_detect.h" |
|
|
| namespace Common { |
|
|
| |
| const MemoryInfo GetMemInfo() { |
| MemoryInfo mem_info{}; |
|
|
| #ifdef _WIN32 |
| MEMORYSTATUSEX memorystatus; |
| memorystatus.dwLength = sizeof(memorystatus); |
| GlobalMemoryStatusEx(&memorystatus); |
| mem_info.total_physical_memory = memorystatus.ullTotalPhys; |
| mem_info.total_swap_memory = memorystatus.ullTotalPageFile - mem_info.total_physical_memory; |
| #elif defined(__APPLE__) |
| u64 ramsize; |
| struct xsw_usage vmusage; |
| std::size_t sizeof_ramsize = sizeof(ramsize); |
| std::size_t sizeof_vmusage = sizeof(vmusage); |
| |
| |
| |
| sysctlbyname("hw.memsize", &ramsize, &sizeof_ramsize, nullptr, 0); |
| sysctlbyname("vm.swapusage", &vmusage, &sizeof_vmusage, nullptr, 0); |
| mem_info.total_physical_memory = ramsize; |
| mem_info.total_swap_memory = vmusage.xsu_total; |
| #elif defined(__FreeBSD__) |
| u_long physmem, swap_total; |
| std::size_t sizeof_u_long = sizeof(u_long); |
| |
| sysctlbyname("hw.physmem", &physmem, &sizeof_u_long, nullptr, 0); |
| sysctlbyname("vm.swap_total", &swap_total, &sizeof_u_long, nullptr, 0); |
| mem_info.total_physical_memory = physmem; |
| mem_info.total_swap_memory = swap_total; |
| #elif defined(__linux__) |
| struct sysinfo meminfo; |
| sysinfo(&meminfo); |
| mem_info.total_physical_memory = meminfo.totalram; |
| mem_info.total_swap_memory = meminfo.totalswap; |
| #else |
| mem_info.total_physical_memory = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); |
| mem_info.total_swap_memory = 0; |
| #endif |
|
|
| return mem_info; |
| } |
|
|
| u64 GetPageSize() { |
| #ifdef _WIN32 |
| SYSTEM_INFO info; |
| ::GetSystemInfo(&info); |
| return static_cast<u64>(info.dwPageSize); |
| #else |
| return static_cast<u64>(sysconf(_SC_PAGESIZE)); |
| #endif |
| } |
|
|
| } |
|
|