cosmopolitan/third_party/dlmalloc/malloc_set_footprint_limit.c

26 lines
1.0 KiB
C

#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;
}