我看到一些 C 库能够指定自定义内存分配器(malloc
/free
替换)。
- 在什么系统/环境/条件下有用?这个功能不只是 MSDOS 时代的遗留物或类似的不再相关的问题吗?
背景故事:
我打算让pngquant成为一个可以嵌入到各种软件(从 iOS 应用程序到 Apache 模块)中的库。我正在使用malloc()
/free()
和我自己的内存池进行小额分配。我总共使用了 2MB-50MB 的内存。我使用线程,但只需要在主线程上分配。
我看到一些 C 库能够指定自定义内存分配器(malloc
/free
替换)。
我打算让pngquant成为一个可以嵌入到各种软件(从 iOS 应用程序到 Apache 模块)中的库。我正在使用malloc()
/free()
和我自己的内存池进行小额分配。我总共使用了 2MB-50MB 的内存。我使用线程,但只需要在主线程上分配。
在任何对内存分配的控制至关重要的应用程序中(例如我的领域、游戏开发或其他实时或接近实时的系统),无法控制库中的内存分配会立即使其无法使用。
存在许多 malloc/free 算法。系统 malloc 有时未针对库正在处理的任务进行优化,因此调用者可能希望尝试一些不同的来优化性能。
想到的几个是:
还有一些垃圾收集库,例如Boehm 垃圾收集器,可通过调用提供的 malloc/free 替换在 C 中使用(即使 free 是一个虚拟函数调用,为了兼容性而保留)。
还有许多可能的用途,例如,可以编写一个调试 malloc/free 函数来跟踪库中的内存分配和释放,例如我写的一个使用 SQLite 记录有关内存使用情况的统计信息(诚然,在性能成本,但这是调试情况)。