#include "libc/limits.h" #include "libc/mem/mem.h" #include "third_party/dlmalloc/dlmalloc.internal.h" /** * Sets the maximum number of bytes to obtain from the system, causing * failure returns from malloc and related functions upon attempts to * exceed this value. The argument value may be subject to page rounding * to an enforceable limit; this actual value is returned. Using an * argument of the maximum possible size_t effectively disables checks. * If the argument is less than or equal to the current * malloc_footprint, then all future allocations that require additional * system memory will fail. However, invocation cannot retroactively * deallocate existing used memory. */ size_t malloc_set_footprint_limit(size_t bytes) { size_t result; /* invert sense of 0 */ if (bytes == 0) result = granularity_align(1); /* Use minimal size */ if (bytes == SIZE_MAX) { result = 0; /* disable */ } else { result = granularity_align(bytes); } return g_dlmalloc->footprint_limit = result; }