mallinfo() is not provided in musl. This patch uses getrusage() instead to use the maximum resident set size as a (poor) approximation of the heap usage. --- occt-V7_3_0p3.bin/src/OSD/OSD_MemInfo.cxx +++ occt-V7_3_0p3/src/OSD/OSD_MemInfo.cxx @@ -35,6 +35,9 @@ #include #include +#include +#include + #include #if defined(__EMSCRIPTEN__) @@ -161,18 +164,22 @@ || IsActive (MemWorkingSetPeak)) { // /proc/%d/status is not emulated - get more info from mallinfo() - const struct mallinfo aMI = mallinfo(); + // mallinfo() not available with musl. We use getrusage to approximate it + // with the maximum resident set size + struct rusage ru = { .ru_maxrss = 0 }; + getrusage(RUSAGE_SELF, &ru); if (IsActive (MemHeapUsage)) { - myCounters[MemHeapUsage] = aMI.uordblks; + myCounters[MemHeapUsage] = ru.ru_maxrss; } if (IsActive (MemWorkingSet)) { - myCounters[MemWorkingSet] = aMI.uordblks; + myCounters[MemWorkingSet] = ru.ru_maxrss; } if (IsActive (MemWorkingSetPeak)) { - myCounters[MemWorkingSetPeak] = aMI.usmblks; + //usmblks is always 0 + myCounters[MemWorkingSetPeak] = 0; } } if (IsActive (MemVirtual)) @@ -182,8 +189,9 @@ #elif (defined(__linux__) || defined(__linux)) if (IsActive (MemHeapUsage)) { - const struct mallinfo aMI = mallinfo(); - myCounters[MemHeapUsage] = aMI.uordblks; + struct rusage ru = { .ru_maxrss = 0 }; + getrusage(RUSAGE_SELF, &ru); + myCounters[MemHeapUsage] = ru.ru_maxrss; } if (!IsActive (MemVirtual)