Say I have a big block of mapped memory I finished using. It came from mmap
ing anonymous memory or using MAP_PRIVATE
. I could munmap
it, then have malloc
mmap
again the next time I make a big enough allocation.
Could I instead give the memory to malloc
directly? Could I say "Hey malloc
, here's an address range I mapped. Go use it for heap space. Feel free to mprotect
, mremap
, or even munmap
it as you wish."?
I'm using glibc on linux.
glibc malloc calls __morecore
(a function pointer) to obtain more memory. See <malloc.h>
. However, this will not work in general because the implementation assumes that the function behaves like sbrk
and returns memory from a single, larger memory region. In practice, with glibc malloc, the only realistic way to make memory available for reuse by malloc is calling munmap
.
Other malloc implementations allow donating memory (in some cases as internal interfaces). For example, musl's malloc has a function called __malloc_donate
which should do what you are asking for.