【发布时间】:2020-10-30 14:16:24
【问题描述】:
我想用malloc分配内存,但不想在malloc中使用动态分配方式。相反,我想使用 malloc 分配一个大块/池,以便我可以将一些变量/对象“新”到这个大内存块/池中。因此,我想修改 glibc 中的 malloc 源代码(例如,malloc/malloc.c),使其适用于我的场景。
修改 glibc 源代码并测试其功能的最方便和有效的方法是什么?我想到的一种方法是下载glibc源,修改代码,然后配置/制作/制作安装,但这会很麻烦,因为我必须经常测试我修改后的malloc版本以确保它正常工作.
非常感谢您的热心帮助!感谢所有的答案和想法。
【问题讨论】:
-
你的提议听起来是个糟糕的主意。无需修改 malloc 即可实现池化。
-
感谢您的评论。你的意思是从头开始实现 malloc() 吗?我可以使用 sbrk() 来扩展具有特定大小的堆,从而分配内存,但它似乎效率不高,因为它很难 free() 并且不能在 glibc 中使用许多定义明确的方法进行内存管理。我想利用 glibc 中的免费和其他机制。这是我的想法。再次感谢!
-
不需要从头开始实现
malloc,或者根本不需要。相反,只需实现您自己的池化分配函数(也许将其称为pooled_malloc)。使用常规的、未更改的malloc和free来管理池,并使用您的新功能为您的对象获取块。 -
我有一些想法,用
malloc分配非常大的缓冲区。获取返回指针。保存。并使用您自己的API管理堆分配的缓冲区(您自己的函数,例如向用户公开您自己的malloc,例如m_malloc(),并管理内存缓冲区)。在程序结束时不要忘记free缓冲区。这样您就不会更改malloc,而是将用户限制为您自己的API。祝你好运。 -
malloc已经这样做了,不是吗?
标签: c linux memory malloc glibc