关于内存池
在大多分配器中,在标准库中的容器中,一般是用标准库的template <class _Ty, class _Alloc = allocator<_Ty>>;也就是标准库的allocator,使用的是operator new
。值得注意的是,此allocator是带有cookie的,内部实际就是一个operator new
调用一次malloc
。
内存池的设计,一个通常的做法是,一次malloc
一个合适的内存大小,然后管理这块内存(切割),比如用链表的形式进行管理
然后重写operator new
,函数调用一次operator new
,就将链表头指针返回,指针指向next
如果我们用指针,则每个对象都会有一个额外的指针内存浪费掉。所以巧妙的方法是用一个嵌入式指针,做法是将数据包装成一个struct
,然后用union
来实现
class Airplane{
private:
struct AirpalneRep{