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

Can i give mapped memory to malloc?

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

我可以直接把内存给malloc吗?我可以说 "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." 吗?

我在 linux.

上使用 glibc

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

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