我可以为malloc提供映射内存吗?

3

假设我有一块大的映射内存正在使用中,它来自于 mmap 匿名内存或使用 MAP_PRIVATE。下次当我需要足够大的内存分配时,我可以使用 munmap 将其释放,然后再使用 mallocmmap 重新分配。

但是,我可以直接将该内存交给 malloc 吗?我可以说 "嘿,malloc,这里有一个映射地址范围,请用它作为堆空间。你可以随意使用 mprotectmremap 或甚至 munmap 它。"

我在 Linux 上使用 glibc。


你看过https://sourceware.org/glibc/wiki/MallocInternals吗? - tk421
我确实查看过那里。我还找到了malloc_get_statemalloc_get_statemallopt,但似乎都不能满足我的需求。 - Filipp
1个回答

1
glibc malloc调用__morecore(函数指针)以获取更多内存。请参见。然而,这通常不起作用,因为实现假设该函数的行为类似于sbrk,并从单个较大的内存区域返回内存。在实践中,对于glibc malloc,使内存可供malloc重复使用的唯一现实方法是调用munmap。
其他malloc实现允许捐赠内存(在某些情况下作为内部接口)。例如,musl的malloc有一个名为__malloc_donate的函数,应该可以满足您的要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接