C库是否应该提供使用自定义内存分配器的能力?

时间:2012-04-05 10:16:44

标签: c design-patterns malloc

我发现有些C库有ability to specify custom memory allocatorsmalloc / free替换。)

  • 在哪些系统/环境/条件中有用?这个功能不仅仅是MSDOS时代的遗留物还是类似的不再相关的问题吗?

背景故事:

我打算让pngquant成为可以嵌入各种软件(从iOS应用程序到Apache模块)的库。我正在使用malloc() / free()和我自己的内存池进行小型分配。我总共使用2MB-50MB的内存。我使用线程,但只需要在主线程上分配。

2 个答案:

答案 0 :(得分:2)

在任何控制内存分配至关重要的应用程序中(例如我的字段,游戏开发或其他真实或近实时系统),无法控制库中的内存分配会立即使其无法使用。

答案 1 :(得分:1)

存在许多malloc / free算法。系统malloc有时不针对库正在处理的任务进行优化,因此调用者可能想尝试一些不同的来优化性能。

一些想到的是:

还有一些垃圾收集库,例如Boehm Garbage Collector,可以通过调用提供的malloc / free替换来在C中使用(即使free是一个虚函数调用,保持兼容性)。

还有许多可能的用途,例如,可以编写一个调试malloc / free函数来跟踪库中的内存分配和解放,例如我编写的一个使用SQLite来记录有关如何使用内存的统计信息(诚​​然以性能为代价,但这是调试情况)。