【发布时间】:2018-02-05 20:12:05
【问题描述】:
通常,可以使用malloc 和free 函数以实现定义的方式分配内存。但是,通常需要管理来自特定区域的内存分配。示例包括:
- 进程间共享内存
- 内存映射文件
- 非易失性存储器
不是每次出现此要求时都编写一次性堆实现,有没有办法重新使用malloc 来管理这些区域(Linux)?否则,任何“知名”内存分配器(例如 dmalloc、ptmalloc 等)是否支持从特定区域分配?
例子:
void *pool = mmap(/* my file */);
void *pool_manager = mallloc_init(pool, /* size */);
void *p = malloc_ex(pool, 1024);
free_ex(pool, p);
【问题讨论】:
-
我认为你不能重复使用
malloc。我可能错了,但我相信您需要为此实现自己的功能。 -
一些内存区域是可写的,不需要malloc。在某些平台上有一个“绝对分配”调用,而在其他一些平台上,共享内存是可写的,但您需要一个约定(信号量)以确保您不会同时写入
-
你使用的是什么操作系统?
-
显然所有这些类型的内存都可以直接读/写。问题是是否可以重用众所周知的分配器来跟踪它。我更新了问题以澄清这一点。
-
问题超出了“
malloc()可以做到这一点吗?” (它不能),这似乎归结为第三方库的推荐请求。恐怕这样的要求在这里是题外话。
标签: c memory-management malloc