63 size_t length =
sizeof(hwmem_size);
64 if (0 <= sysctlbyname(
"hw.memsize", &hwmem_size, &length, NULL, 0))
66#elif defined(__WIN32__)
68 if (GetPhysicallyInstalledSystemMemory(&mem_kb))
71 struct sysinfo si_data;
72 if (!sysinfo(&si_data))
73 return si_data.totalram * si_data.mem_unit;
85 index_page_faults = 8,
86 index_virtual_size = 19,
87 index_resident_size = 20,
92 std::ifstream stat_stream(
"/proc/self/stat", std::ios_base::in);
93 std::array<std::size_t, 21> val;
99 std::string pid, comm, state;
100 stat_stream >> pid >> comm >> state;
104 while (!stat_stream.eof() && i < val.size())
106 stat_stream >> val[i];
119 val[index_resident_size] *= sysconf(_SC_PAGE_SIZE);
125 auto pid = GetCurrentProcessId();
126 auto hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
128 PROCESS_MEMORY_COUNTERS pmc;
129 if (NULL == hProcess || !GetProcessMemoryInfo(hProcess, &pmc,
sizeof(pmc)))
134 val[index_page_faults] = pmc.PageFaultCount;
135 val[index_virtual_size] = pmc.WorkingSetSize + pmc.PagefileUsage;
136 val[index_resident_size] = pmc.WorkingSetSize;
144#if defined(__APPLE__)
145 struct task_basic_info t_info;
146 mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
147 if (KERN_SUCCESS == task_info(mach_task_self(),
149 reinterpret_cast<task_info_t
>(&t_info),
153 val[index_virtual_size] = t_info.virtual_size;
154 val[index_resident_size] = t_info.resident_size;
157 mooseDoOnce(
::mooseWarning(
"task_info call failed, memory usage numbers will be incorrect"));