从最简单的入手
1.实现一个固定大小的allocator
//分配固定大小内存块的模板类,内部缓存算法自己实现了,
//我用的是预分配+回收cache链
//即分配时先检查回收链有无数据,无的话每次分配n*size个块,然后返回其中一个,直到该块用完后继续分配
//释放时直接加入回收链即可
//好处是速度够块,但是浪费空间可能就比较大了
template <size_t size> class Fix_Allocator{
void* alloc(size_t size);
void free(void*p);
typedef Fix_Allocator me;
static me Instance;
};
提供一个给host class用的impl template
template <class Host> class new_op{
void* operator new(size_t size);
//........
};
template <
typename Host
>
inline void* new_op<Host>:: operator new(size_t size){
return Fix_Allocator<sizeof(Host)>::Instance.alloc(size);
}
然后所有需要内存池的类继承new_op即可
class cls_usePool:public new_op<cls_usePool>{
.........
};
2.改进
以上方法的不足,大小