【问题标题】:Can i give mapped memory to malloc?我可以给malloc映射内存吗?
【发布时间】:2019-11-21 16:28:59
【问题描述】:

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

我可以直接把内存给malloc吗?我可以说“嘿malloc,这是我映射的地址范围。将它用于堆空间。随意mprotectmremap,甚至munmap,随心所欲。”?

我在 linux 上使用 glibc。

【问题讨论】:

标签: memory posix glibc mmap


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多