假设我有一大块已用完的映射内存。它来自 mmap
ing 匿名内存或使用 MAP_PRIVATE
。我可以 munmap
它,然后在下次我进行足够大的分配时再次使用 malloc
mmap
。
我可以直接将内存交给 malloc
吗?我可以说“嘿 malloc
,这是我映射的地址范围。将它用于堆空间。随意使用 mprotect
、mremap
,或者甚至 munmap
如你所愿。”?
我在 Linux 上使用 glibc。
最佳答案
glibc malloc 调用 __morecore
(函数指针)以获得更多内存。参见 <malloc.h>
.但是,这通常不起作用,因为实现假定该函数的行为类似于 sbrk
。并从一个更大的内存区域返回内存。实际上,使用 glibc malloc,使内存可供 malloc 重用的唯一现实方法是调用 munmap
.
其他 malloc 实现允许捐赠内存(在某些情况下作为内部接口(interface))。比如musl的malloc有一个函数叫做__malloc_donate
哪个应该满足您的要求。
关于memory - 我可以将映射内存提供给 malloc 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56997908/