我正在寻找C语言中良好的内存池实现。

它应包括以下内容:

  • 防碎片。
  • super 快:)
  • 能够“捆绑”一些标识符下不同大小的多个分配,并删除具有给定标识符的所有分配。
  • 线程安全
  • 最佳答案

    我认为,作为samba一部分开发的优秀 talloc 可能正是您所需要的。我发现最有趣的部分是,从talloc返回的任何指针都是有效的内存上下文。他们的例子是:

    struct foo *X = talloc(mem_ctx, struct foo);
    X->name = talloc_strdup(X, "foo");
    // ...
    talloc_free(X); // frees memory for both X and X->name
    

    针对您的特定观点:

    (1)在这种情况下,不确定什么是抗碎片。在C语言中,您无论如何都不会压缩垃圾收集,因此我认为您的选择有些有限。

    (2)它的广告仅比纯malloc(3)慢4%,这是相当快的。

    (3)参见上面的示例。

    (4)只要不同的线程使用不同的上下文,并且底层的malloc是线程安全的,它就是线程安全的。

    关于c - 用C实现内存池,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7060684/

    10-11 21:19