2020-06-15 14:18:57 +00:00
|
|
|
#include "libc/limits.h"
|
|
|
|
#include "libc/mem/mem.h"
|
|
|
|
#include "third_party/dlmalloc/dlmalloc.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);
|
|
|
|
}
|
2020-09-07 04:39:00 +00:00
|
|
|
return g_dlmalloc->footprint_limit = result;
|
2020-06-15 14:18:57 +00:00
|
|
|
}
|