【发布时间】:2014-06-14 00:41:42
【问题描述】:
如果我希望使用自定义的预分配堆构建类似 malloc 的功能,那么 C 语言中的最佳方法是什么?
我的具体问题是我有一个可映射(类似内存)的设备,它已被放置在我的地址空间中,但我需要获得一种更灵活的方式来使用此内存来存储将被分配和释放的对象随着时间的推移。
我知道 malloc、free 和其他类似的函数用于在堆上执行这种分配,但是有没有办法在提供我自己的地址空间的同时使用这种函数提供的逻辑来实现其动态行为作为有问题的堆运行?
【问题讨论】:
-
我可能误解了你的问题,但在我看来你正在寻找类似 @987654321@ 的东西,它类似于 fork,但它允许你将堆栈传递给那个子进程
-
嗯,你需要什么样的内存管理?
malloc&free的全部通用性?或者你是否遵守堆栈规则(先分配,先释放)?也许您可以限制自己分配单一大小并创建一个 pool? -
@EliasVanOotegem 感谢您的评论,不幸的是,这并不是我想要的。本质上,我有一个自定义内存映射设备,我希望将其用作内存分配的“堆”。我正在寻找一种在此设备上运行内存分配器而不是普通堆的方法。这不是在这种情况下允许 IPC,只是因为我需要将数据存储在特定设备上。
-
@delnan 我可能可以管理单一大小的分配(对象非常大,因此从四舍五入到一页的开销很小)但是堆栈可能不太好。对象不太可能以可预测的顺序被释放。考虑到标准库中的所有逻辑,我有点惊讶,没有一种相当简单的方法可以做到这一点,只是无法将它们指向自定义后端。不过感谢您的评论。
-
在 Windows 上,有自定义堆。它们可用于多种用例,例如:创建所有对象具有相同大小的自定义堆(以帮助解决内部碎片)或创建固定大小的堆(以防止应用程序使用比预期更多的内存。Unix * 世界尚未认识到这是一个非常有用的功能。
标签: c linux memory memory-management heap-memory