allocator是空间配置器而不说是内存配置器,因为他可以直接向硬盘取空间。
SGI也有allocator,但一般使用的都是alloc,因为allocator只是基层内置配置/释放行为(::operator new,这应该是一个全局函数,这也是C++内存配置的基本操作)的一个封装而已,没有效率上的优化。
STLallocator的默认操作:
1. alloc::allocate() : 内存配置操作(malloc)
2. alloc::deallocate() : 内存释放操作(free)
3. ::construct :对象构造 (全局函数)
4. ::destroy::对象析构
第二级配置器:
配置器会维持16个自由链表,链表指向的区块大小分别为8,16,24……128,当客户端申请一个指定的内存时,如果大于128,则调用第一级配置器,使用malloc进行分配。如果小于128byte,则根据内存大小找到对应的自由链表,如果自由链表上有空闲空间,则进行分配返回,否则从内存池取得空间。内存池要是也没有空间则使用malloc分配,如果堆内存不够,那么就检查内部空间。如果还是不行就调用第一级配置器。
有空再看内存基本处理工具