3、dlmalloc、nedmalloc
Dlmalloc、nedmalloc等知名分配器估计搞内存池的人都知道,dlmalloc是单线程的,不考虑锁,nedmalloc是多线程的,带锁,其实nedmalloc也是线程缓存式的内存池,具体实现我就不说了,nedmalloc我大致看了一下,dlmalloc我也没有深入分析过。
关于两者分配性能前面都提到过,就不再说了,如果不想自己研究内存池,用这两者绝对是很合适的一个选择,取代crt里面的malloc系列是正合适,我曾经很长一段时间将nedmalloc作为server程序的默认内存分配器,而不是用前面提到的多线程内存池,我甚至为程序定义了一个IAllocator,根据不同选项采用不同的内存分配模式,采用nedmalloc的时候就用
#pragma warning(disable : 4291)
class ned_alloc
{
public:
static void *operator new(size_t size)
{
return nedmalloc(size);
}
static void operator delete(void *p, size_t size)
{
nedfree(p);
}
};
typedef ned_alloc galloc;
#define gmalloc nedmalloc
#define gfree nedfree
#define gcalloc nedcalloc
#define grealloc nedrealloc
如此的确满足了很多时候的需求,而且calloc realloc等都支持,的确是个大而全的好解决办法。如果不是最近有空亲自实现了一个简单的线程相关内存池,我估计我还会继续使用nedmalloc作为默认的server程序内存分配方案。