我可以将映射内存提供给 malloc 吗?
Can i give mapped memory to malloc?
假设我有一大块已用完的映射内存。它来自 mmap
ing 匿名内存或使用 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
的函数,它应该可以满足您的要求。
假设我有一大块已用完的映射内存。它来自 mmap
ing 匿名内存或使用 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.
上使用 glibcglibc malloc 调用 __morecore
(函数指针)以获得更多内存。参见 <malloc.h>
。但是,这通常不起作用,因为实现假定函数的行为类似于来自单个更大内存区域的 sbrk
和 returns 内存。实际上,使用 glibc malloc,使内存可供 malloc 重用的唯一现实方法是调用 munmap
.
其他 malloc 实现允许捐赠内存(在某些情况下作为内部接口)。例如,musl 的 malloc 有一个名为 __malloc_donate
的函数,它应该可以满足您的要求。