11#ifndef NO_MULTITHREADING
15#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
16#include <sys/resource.h>
19#define PSAPI_VERSION 1
34 PROCESS_MEMORY_COUNTERS pmc{};
35 if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc,
sizeof(pmc)))
36 return static_cast<std::size_t>(pmc.PeakWorkingSetSize);
38#elif defined(__APPLE__) || defined(__FreeBSD__)
39 struct rusage usage{};
40 if (getrusage(RUSAGE_SELF, &usage) == 0)
44#elif defined(__linux__)
45 struct rusage usage{};
46 if (getrusage(RUSAGE_SELF, &usage) == 0)
48 return static_cast<std::size_t>(usage.ru_maxrss) * 1024ULL;
66extern "C" void logstr(
char const* msg)
68#ifndef NO_MULTITHREADING
69 static std::mutex log_mutex;
73 static bool disable_mem_usage =
std::getenv(
"BB_DISABLE_MEM_USAGE") !=
nullptr;
74 if (disable_mem_usage) {
83 const double mib =
static_cast<double>(bytes) / (1024.0 * 1024.0);
void logstr(char const *msg)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept