BOOL PALAPI PAL_GetWorkingSetSize(size_t* val) { BOOL result = false; size_t linelen; char* line = nullptr; if (val == nullptr) return FALSE; FILE* file = fopen(PROC_STATM_FILENAME, "r"); if (file != nullptr && getline(&line, &linelen, file) != -1) { char* context = nullptr; char* strTok = strtok_s(line, " ", &context); strTok = strtok_s(nullptr, " ", &context); errno = 0; *val = strtoull(strTok, nullptr, 0); if(errno == 0) { *val = *val * GetVirtualPageSize(); result = true; } } if (file) fclose(file); free(line); return result; }
BOOL PALAPI PAL_GetPhysicalMemoryUsed(size_t* val) { BOOL result = false; size_t linelen; char* line = nullptr; if (val == nullptr) return FALSE; // Linux uses cgroup usage to trigger oom kills. if (CGroup::GetPhysicalMemoryUsage(val)) return TRUE; // process resident set size. FILE* file = fopen(PROC_STATM_FILENAME, "r"); if (file != nullptr && getline(&line, &linelen, file) != -1) { char* context = nullptr; char* strTok = strtok_s(line, " ", &context); strTok = strtok_s(nullptr, " ", &context); errno = 0; *val = strtoull(strTok, nullptr, 0); if(errno == 0) { *val = *val * GetVirtualPageSize(); result = true; } } if (file) fclose(file); free(line); return result; }