5

我看到一些 C 库能够指定自定义内存分配器malloc/free替换)。

  • 在什么系统/环境/条件下有用?这个功能不只是 MSDOS 时代的遗留物或类似的不再相关的问题吗?

背景故事:

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

4

2 回答 2

2

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

于 2012-04-05T10:20:09.817 回答
1

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

想到的几个是:

还有一些垃圾收集库,例如Boehm 垃圾收集器,可通过调用提供的 malloc/free 替换在 C 中使用(即使 free 是一个虚拟函数调用,为了兼容性而保留)。

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

于 2012-04-05T10:23:06.283 回答