【问题标题】:malloc implementation from fixed size buffer来自固定大小缓冲区的 malloc 实现
【发布时间】:2011-06-07 03:35:39
【问题描述】:

我需要一个使用一个大的固定大小缓冲区的通用 malloc 实现。类似于 SQLite 的“Zero-malloc memory allocator”。你知道任何这样的实现吗?它应该是轻量级和便携的,可以用于嵌入式应用程序。

提前致谢。

【问题讨论】:

  • 你的 malloc 出了什么问题?
  • @Mathk:内存碎片(或没有)。想事先知道内核将为进程分配多少内存。

标签: c malloc


【解决方案1】:

两个建议:

  1. 如果你需要一些生产质量和经过良好测试的东西,只需借用 SQLite 的分配器。 SQLite 的源代码编写得非常好,有文档记录,经过了非常好的测试,并且拥有非常宽松的开源许可证。
  2. 如果您需要一些小而简单的东西,无论是学习还是在嵌入式环境中使用,考虑 this implementation [无耻插件!] - 只需 350 LOC 的注释 C 代码。

【讨论】:

  • 我同意您链接到的帖子中的一些评论者的观点 - 这种分配器无法解决嵌入式系统的稳健性问题(灾难性碎片)。 OP 应该更好地陈述需求,并考虑他所要求的是否能真正解决问题。
  • @R:没有碎片不是分配器的目的,而是以可靠的方式计算嵌入式应用程序所需的堆内存总量。
  • 谢谢。我正在寻找一个用于测试目的的简单实现。我看到 realloc 没有实现。我打算使用它的大型代码库,其中也使用了 reallocs。我想最好按照您和其他人的建议移植 SQLite 实现。我没有这样做,因为我预计其他人可能已经这样做了,而且我很懒 :)
  • @Manish:realloc 在 malloc 和 free 方面实现起来很简单
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

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