下面的示例使用了Emery小组的库--HeapLayers,为了定义可配置的分配算符,其中使用了mixins(在C++社区中,也被称为Coplien递归模式):通过参数化的基来定义类,每一层中只定义两个成员函数,malloc和free:
template
malloc(size_t sz); void free(void* p); //系统相关的值 enum { Alignment =
sizeof(double) }; //可选接口e size_t getSize(const void* p);};
在每一层的实现中,都有可能向它的基类请求内存,一般来说,一个不依赖于外界的内存分配算符,都会处在层次的顶层--直接向前请求系统的new和delete操作符、malloc和free函数。在HeapLayers的术语中,没有顶层堆,以下是示例:
struct MallocHeap { void * malloc(size_t sz) { return
std::malloc(sz); } void free(void* p) { return
std::free(p); }};
为获取内存,顶层堆也能通过系统调用来实现,如Unix的sbrk或mmap。getSize函数的情况就比较特殊,不是每个人都需要它,定义它只是一个可选项。但如果定义了它,你所需做的只是插入一个存储内存块大小的层,并提供getSize函数