| 90 | /* ── OS fallback for RSS (ASan builds where MI_OVERRIDE=0) ──── */ |
| 91 | |
| 92 | static size_t os_rss(void) { |
| 93 | #ifdef _WIN32 |
| 94 | PROCESS_MEMORY_COUNTERS pmc; |
| 95 | if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) { |
| 96 | return (size_t)pmc.WorkingSetSize; |
| 97 | } |
| 98 | return 0; |
| 99 | #elif defined(__APPLE__) |
| 100 | struct mach_task_basic_info info = {0}; |
| 101 | mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT; |
| 102 | if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &count) == |
| 103 | KERN_SUCCESS) { |
| 104 | return (size_t)info.resident_size; |
| 105 | } |
| 106 | return 0; |
| 107 | #else |
| 108 | FILE *f = fopen("/proc/self/statm", "r"); |
| 109 | if (!f) { |
| 110 | return 0; |
| 111 | } |
| 112 | unsigned long pages = 0; |
| 113 | unsigned long rss_pages = 0; |
| 114 | if (fscanf(f, "%lu %lu", &pages, &rss_pages) != 2) { |
| 115 | rss_pages = 0; |
| 116 | } |
| 117 | (void)fclose(f); |
| 118 | long ps = sysconf(_SC_PAGESIZE); |
| 119 | return rss_pages * (ps > 0 ? (size_t)ps : CBM_SZ_4K); |
| 120 | #endif |
| 121 | } |
| 122 | |
| 123 | /* ── Pressure logging (hysteresis) ────────────────────────────── */ |
| 124 |
no outgoing calls
no test coverage detected