summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/memory_detect.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/common/memory_detect.cpp b/src/common/memory_detect.cpp
index 3fdc309a2..e981b9a2a 100644
--- a/src/common/memory_detect.cpp
+++ b/src/common/memory_detect.cpp
@@ -9,10 +9,12 @@
9// clang-format on 9// clang-format on
10#else 10#else
11#include <sys/types.h> 11#include <sys/types.h>
12#ifdef __APPLE__ 12#if defined(__APPLE__) || defined(__FreeBSD__)
13#include <sys/sysctl.h> 13#include <sys/sysctl.h>
14#else 14#elif defined(__linux__)
15#include <sys/sysinfo.h> 15#include <sys/sysinfo.h>
16#else
17#include <unistd.h>
16#endif 18#endif
17#endif 19#endif
18 20
@@ -42,11 +44,22 @@ static MemoryInfo Detect() {
42 sysctlbyname("vm.swapusage", &vmusage, &sizeof_vmusage, NULL, 0); 44 sysctlbyname("vm.swapusage", &vmusage, &sizeof_vmusage, NULL, 0);
43 mem_info.TotalPhysicalMemory = ramsize; 45 mem_info.TotalPhysicalMemory = ramsize;
44 mem_info.TotalSwapMemory = vmusage.xsu_total; 46 mem_info.TotalSwapMemory = vmusage.xsu_total;
45#else 47#elif defined(__FreeBSD__)
48 u_long physmem, swap_total;
49 std::size_t sizeof_u_long = sizeof(u_long);
50 // sysctlbyname(const char *, void *, size_t *, const void *, size_t);
51 sysctlbyname("hw.physmem", &physmem, &sizeof_u_long, NULL, 0);
52 sysctlbyname("vm.swap_total", &swap_total, &sizeof_u_long, NULL, 0);
53 mem_info.TotalPhysicalMemory = physmem;
54 mem_info.TotalSwapMemory = swap_total;
55#elif defined(__linux__)
46 struct sysinfo meminfo; 56 struct sysinfo meminfo;
47 sysinfo(&meminfo); 57 sysinfo(&meminfo);
48 mem_info.TotalPhysicalMemory = meminfo.totalram; 58 mem_info.TotalPhysicalMemory = meminfo.totalram;
49 mem_info.TotalSwapMemory = meminfo.totalswap; 59 mem_info.TotalSwapMemory = meminfo.totalswap;
60#else
61 mem_info.TotalPhysicalMemory = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE);
62 mem_info.TotalSwapMemory = 0;
50#endif 63#endif
51 64
52 return mem_info; 65 return mem_info;