14 #if defined(__GNUC__) && defined(__linux__)
17 #if defined(__APPLE__) && defined(__GNUC__) // Mac OS X
18 #include <mach/mach_init.h>
19 #include <mach/task.h>
20 #elif defined(_MSC_VER) // WINDOWS
34 #if defined(__APPLE__) && defined(__GNUC__) // Mac OS X
36 task_t task = MACH_PORT_NULL;
37 struct task_basic_info t_info;
38 mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
40 if (KERN_SUCCESS != task_info(mach_task_self(), TASK_BASIC_INFO,
41 (task_info_t)&t_info, &t_info_count)) {
44 int64 resident_memory = t_info.resident_size;
45 return resident_memory;
47 #elif defined(__GNUC__) // LINUX
51 snprintf(buf,
sizeof(buf),
"/proc/%u/statm", (
unsigned)getpid());
52 FILE*
const pf = fopen(buf,
"r");
54 if (fscanf(pf,
"%u", &size) != 1)
return 0;
59 #elif defined(_MSC_VER) // WINDOWS
62 PROCESS_MEMORY_COUNTERS pmc;
63 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,
64 GetCurrentProcessId());
67 if (GetProcessMemoryInfo(hProcess, &pmc,
sizeof(pmc))) {
68 memory = pmc.WorkingSetSize;
70 CloseHandle(hProcess);
74 #else // Unknown, returning 0.