allocator是空间配置器而不说是内存配置器,因为他可以直接向硬盘取空间。

SGI也有allocator,但一般使用的都是alloc,因为allocator只是基层内置配置/释放行为(::operator new,这应该是一个全局函数,这也是C++内存配置的基本操作)的一个封装而已,没有效率上的优化。

new,malloc和::operator new

STLallocator的默认操作:
1. alloc::allocate() : 内存配置操作(malloc)
2. alloc::deallocate() : 内存释放操作(free)
3. ::construct :对象构造 (全局函数)
4. ::destroy::对象析构

第二级配置器:

配置器会维持16个自由链表,链表指向的区块大小分别为8,16,24……128,当客户端申请一个指定的内存时,如果大于128,则调用第一级配置器,使用malloc进行分配。如果小于128byte,则根据内存大小找到对应的自由链表,如果自由链表上有空闲空间,则进行分配返回,否则从内存池取得空间。内存池要是也没有空间则使用malloc分配,如果堆内存不够,那么就检查内部空间。如果还是不行就调用第一级配置器。
空间适配器(allocator)

有空再看内存基本处理工具

相关文章:

  • 2018-10-12
  • 2021-07-04
  • 2022-01-19
  • 2022-12-23
  • 2021-06-24
  • 2021-09-11
  • 2022-12-23
猜你喜欢
  • 2021-05-21
  • 2022-03-04
  • 2022-12-23
  • 2022-02-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案