我可以给映射内存给malloc吗?

时间:2019-07-11 22:10:00

标签: memory posix glibc mmap

说我有一大堆已完成使用的映射内存。它来自mmap匿名存储或使用MAP_PRIVATE。我可以munmap使用它,然后下次我进行足够大的分配时再次使用malloc mmap

我可以直接给malloc留下记忆吗?我可以说“嘿malloc,这是我映射的地址范围。将其用于堆空间。随时随地mprotectmremap甚至munmap都可以使用它希望。”?

我在Linux上使用glibc。

1 个答案:

答案 0 :(得分:0)

glibc malloc调用__morecore(一个函数指针)以获取更多的内存。参见<malloc.h>。但是,这通常不会起作用,因为该实现假定该函数的行为类似于sbrk并从单个较大的内存区域返回内存。实际上,使用glibc malloc,使内存可供malloc复用的唯一现实方法是调用munmap

其他malloc实现允许捐赠内存(在某些情况下作为内部接口)。例如,musl的malloc具有一个名为__malloc_donate的函数,该函数应该可以满足您的要求。