105#if defined(__APPLE__)
106 task_basic_info_data_t info;
107 mach_msg_type_number_t count = TASK_BASIC_INFO_COUNT;
108 if (task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &count) != KERN_SUCCESS) {
111 rss =
static_cast<std::uint64_t
>(info.resident_size);
112 vms =
static_cast<std::uint64_t
>(info.virtual_size);
114#elif defined(__linux__)
115 FILE* f = std::fopen(
"/proc/self/statm",
"r");
116 if (!f)
return false;
117 long pages_res=0, pages_total=0;
118 int rc = std::fscanf(f,
"%ld %ld", &pages_total, &pages_res);
120 if (rc != 2)
return false;
121 long page_size = sysconf(_SC_PAGESIZE);
122 vms =
static_cast<std::uint64_t
>(pages_total) *
static_cast<std::uint64_t
>(page_size);
123 rss =
static_cast<std::uint64_t
>(pages_res) *
static_cast<std::uint64_t
>(page_size);
126 PROCESS_MEMORY_COUNTERS_EX pmc{};
127 if (GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc,
sizeof(pmc))) {
128 rss =
static_cast<std::uint64_t
>(pmc.WorkingSetSize);
129 vms =
static_cast<std::uint64_t
>(pmc.PrivateUsage);