我正在寻找一种优秀的C语言内存池实现。
它应该包括以下几个方面:
- 抗碎片化
- 非常快速 :)
- 能够将来自不同大小的多个分配捆绑在某个标识符下,并删除具有给定标识符的所有分配。
- 线程安全的
我正在寻找一种优秀的C语言内存池实现。
它应该包括以下几个方面:
我认为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
malloc(3)
慢 4%,速度非常快。你有没有研究过以下两种内存分配器:
这两个分配器都利用了内存池,但大多数情况下对用户来说是透明的。
通常情况下,自定义内存池可以获得最佳性能(可以根据模式进行优化)。我最终为不同的访问模式编写了几个自定义内存池。
对于已经经过充分测试的内存池,您可能只想使用APR内存池:
http://apr.apache.org/docs/apr/1.4/apr__pools_8h.html
请注意,单个内存池不是线程安全的,您需要自己处理。