使用类似SLAB的技术优化C程序

Ale*_*kov 6 c optimization memory-management

我有一个编程项目,大量使用malloc/free函数.它有三种类型的结构,具有非常高的动态性和大数量.通过这种方式,malloc和free被大量使用,每秒被称为数千次.可以用用户空间版本的SLAB替换标准内存分配来解决这个问题吗?这种算法有没有实现?

PS

  1. 系统是面向Linux的.
  2. 结构大小小于100个字节.
  3. 最后,我更愿意使用现成的实现,因为内存管理真的很难.

Nec*_*lis 8

如果你只有三种不同的话,那么你可以通过使用池分配器(定制或类似的boost::pool但是对于C)获得很大的好处.Doug Lea的基于binning的malloc将作为池分配器(在glibc中使用)的一个非常好的基础.

但是,您还需要考虑其他因素,例如多线程和内存重用(将分配对象,释放然后重新分配或仅分配然后释放?).从这个角度你可以检查tcmalloc(它是为极端分配,数量和内存使用而设计),nedmallochoard.所有这些分配器都是开源的,因此可以轻松更改以适应您分配的对象的大小.