我正在寻找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
针对您的特定观点:
(1)在这种情况下,不确定什么是抗碎片。在C语言中,您无论如何都不会压缩垃圾收集,因此我认为您的选择有些有限。
(2)它的广告仅比纯
malloc(3)
慢4%,这是相当快的。(3)参见上面的示例。
(4)只要不同的线程使用不同的上下文,并且底层的malloc是线程安全的,它就是线程安全的。
关于c - 用C实现内存池,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7060684/