14#if defined(__GNUC__) && defined(__linux__)
17#if defined(__APPLE__) && defined(__GNUC__)
18#include <mach/mach_init.h>
20#elif (defined(__FreeBSD__) || defined(__NetBSD__) || \
22#include <sys/resource.h>
25#elif defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
39#if defined(__APPLE__) && defined(__GNUC__)
41 task_t task = MACH_PORT_NULL;
42 struct task_basic_info t_info;
43 mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
45 if (KERN_SUCCESS != task_info(mach_task_self(), TASK_BASIC_INFO,
46 (task_info_t)&t_info, &t_info_count)) {
49 int64_t resident_memory = t_info.resident_size;
50 return resident_memory;
52#elif defined(__GNUC__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && \
53 !defined(__OpenBSD__) && !defined(__EMSCRIPTEN__) && \
58 snprintf(buf,
sizeof(buf),
"/proc/%u/statm", (
unsigned)getpid());
59 FILE*
const pf = fopen(buf,
"r");
61 if (fscanf(pf,
"%u", &size) != 1)
return 0;
64 return int64_t{1024} * size;
66#elif (defined(__FreeBSD__) || defined(__NetBSD__) || \
69 int who = RUSAGE_SELF;
71 getrusage(who, &rusage);
72 return (int64_t)(int64_t{1024} * rusage.ru_maxrss);
74#elif defined(_MSC_VER) || defined(__MINGW32__) || \
78 PROCESS_MEMORY_COUNTERS pmc;
79 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,
80 GetCurrentProcessId());
83 if (GetProcessMemoryInfo(hProcess, &pmc,
sizeof(pmc))) {
84 memory = pmc.WorkingSetSize;
86 CloseHandle(hProcess);
In SWIG mode, we don't want anything besides these top-level includes.
int64_t GetProcessMemoryUsage()
GetProcessMemoryUsage.