C中的内存池实现

Avi*_*hya 9 c memory memory-management allocation pool

我在C中寻找一个好的内存池实现.

它应包括以下内容:

  1. 反碎片化.
  2. 超级快:)
  3. 能够在某些标识符下"捆绑"来自不同大小的多个分配,并删除具有给定标识符的所有分配.
  4. 线程安全

Bob*_*ers 8

我认为talloc作为samba的一部分开发的优秀可能是您正在寻找的.我发现最有趣的部分是从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
Run Code Online (Sandbox Code Playgroud)

回应您的具体要点:

(1)在这种情况下不确定反碎片是什么.在C中你无论如何都不会得到紧凑的垃圾收集,所以我认为你的选择有限.

(2)它宣传的速度比普通慢4%,速度malloc(3)相当快.

(3)见上面的例子.

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