说我有一大堆已完成使用的映射内存。它来自mmap
匿名存储或使用MAP_PRIVATE
。我可以munmap
使用它,然后下次我进行足够大的分配时再次使用malloc
mmap
。
我可以直接给malloc
留下记忆吗?我可以说“嘿malloc
,这是我映射的地址范围。将其用于堆空间。随时随地mprotect
,mremap
甚至munmap
都可以使用它希望。”?
我在Linux上使用glibc。
答案 0 :(得分:0)
glibc malloc调用__morecore
(一个函数指针)以获取更多的内存。参见<malloc.h>
。但是,这通常不会起作用,因为该实现假定该函数的行为类似于sbrk
并从单个较大的内存区域返回内存。实际上,使用glibc malloc,使内存可供malloc复用的唯一现实方法是调用munmap
。
其他malloc实现允许捐赠内存(在某些情况下作为内部接口)。例如,musl的malloc具有一个名为__malloc_donate
的函数,该函数应该可以满足您的要求。