我看到一些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记录有关内存使用情况的统计信息(诚然,这是以性能为代价的,但这是一种调试情况)。