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



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

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

背景故事:

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

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

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

脑海中浮现的几个是:

  • dlmalloc
  • jemalloc
  • TCMalloc

还有一些垃圾回收库,如Boehm垃圾回收器,它们在C中可以通过调用提供的malloc/free替换来使用(尽管free当时是一个伪函数调用,为了兼容性而保留)。

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

相关内容

  • 没有找到相关文章

最新更新