void currentProcessMemoryStatus(ProcessMemoryStatus& memoryStatus) { FILE* file = fopen("/proc/self/statm", "r"); if (!file) return; char buffer[128]; char* line = fgets(buffer, 128, file); fclose(file); if (!line) return; size_t pageSize = systemPageSize(); char* end = nullptr; unsigned long long intValue = strtoull(line, &end, 10); memoryStatus.size = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.resident = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.shared = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.text = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.lib = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.data = intValue * pageSize; intValue = strtoull(end, &end, 10); memoryStatus.dt = intValue * pageSize; }
size_t pageSize() { if (!s_pageSize) s_pageSize = systemPageSize(); ASSERT(isPowerOfTwo(s_pageSize)); return s_pageSize; }