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

标签 memory posix glibc mmap

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

我可以直接将内存交给 malloc 吗?我可以说“嘿 malloc,这是我映射的地址范围。将它用于堆空间。随意使用 mprotectmremap,或者甚至 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/

相关文章:

c++ - 存储在内存中的结构内部的函数在哪里?

c++ - 每个对象内存分配的开销是多少?

c++ - 在指定 C++ 异常和 pthread 取消的交互方面有什么进展吗?

iphone - 3G网络中NSPOSIXErrorDomain Code=12 "Cannot allocate memory"

memory - GCC 对读/写指令的重新排序

java - 为了节省内存并在java中快速运行,我应该使用哪种方式

c - C 中的非忙阻塞队列实现

linux - 在 CentOS 7 上构建和使用更新的 GLIBC

linux - 在linux中,malloc给你谁的数据?

gcc - 如何在编译时删除 `GLIBC_2.27' 要求?