从固定大小的缓冲区实现malloc分配函数

10

我需要一个通用的malloc 实现,它使用一个大的固定大小的缓冲区。类似于SQLite所使用的"Zero-malloc 内存分配器"。您是否了解任何这样的实现?它应该是轻量级和可移植的,可以用于嵌入式应用。

提前致谢。


你的malloc出了什么问题? - mathk
1
@Mathk:关于内存碎片化(或者不是),我想提前知道内核为进程分配了多少内存。 - Manish
3个回答

7

两个建议:

  1. 如果您需要生产质量和经过充分测试的东西,只需借用SQLite的分配器。SQLite的源代码非常优秀,有文档,经过极其严格的测试,并且具有非常宽松的开源许可证。
  2. 如果您需要一些小而简单的东西,无论是为了学习还是在嵌入式环境中使用,请考虑这个实现 [不要介意我自己推荐!] - 只有350行有注释的C代码。

我同意您链接的帖子上一些评论者的观点 - 这种分配器对于嵌入式系统的健壮性问题(灾难性碎片化)没有任何帮助。原帖作者应该更好地说明需求,并考虑他所要求的是否真的能解决问题。 - R.. GitHub STOP HELPING ICE
1
@R:那个分配器的目标不是缺乏碎片,而是以可靠的方式计算嵌入式应用程序所需的堆内存总量。 - Eli Bendersky
1
谢谢。我正在寻找一个简单的实现来进行测试。我发现realloc没有被实现。我计划在一个有realloc使用的大型代码库中使用它。我想最好还是像你和其他人建议的那样移植SQLite实现。我没有这样做,因为我希望其他人可能已经做了,而且因为我很懒 :) - Manish
@Manish:realloc在malloc和free方面实现起来很简单。 - Eli Bendersky

4

SQLite的源代码是免费提供的。如果你喜欢特定的实现方式,为什么不使用它呢?


1

大多数当前的malloc实现是通过切割从操作系统获得的大块内存来工作的。如果该块用完了,malloc会向操作系统请求一个新的大块。

您可以基于现有的malloc实现(例如glibc),而不是从操作系统获取块,而是使用单个静态缓冲区。当它用完时,malloc将开始失败,就像操作系统无法提供任何新块时一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接