美文网首页
配置器(allocator)

配置器(allocator)

作者: 世界上的一道风 | 来源:发表于2019-11-05 12:14 被阅读0次

配置器(allocator)

配置器:负责空间配置与管理,从实现的角度来看,配置器是一个实现了动态空间配置、空间管理、空间释放的 class template。

空间配置器:整个 STL 的操作对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以存放内容。

具有次配置力(sub-allocation)的 SGI 空间配置器

SGI STL 的配置器,其名称是 alloc 而不是 allocator,而且不接受任何参数。

SGI STL 的每一个容器都已经指定其缺省的空间配置器为 alloc

template <class T, class Alloc = alloc>  // 缺省使用 alloc 为配置器
class vector {...};

vector<int, std::alloc> iv; 
  • <defalloc.h>----SGI 标准的空间配置器,std::allocator

    allocator 只是基层内存配置/释放行为(::operator::new 和 ::operator::delete)的一层薄薄的包装,并没有考虑到任何效率上的强化。

  • SGI 特殊的空间配置器,std::alloc

    • <stl_construct.h>:定义了全局函数 construct() 和 destroy(),负责对象的构造和析构。
    • <stl_alloc.h>:定义了一、二级配置器,配置器名为 alloc。
    • <stl_uninitialized.h>:定义了全局函数,用来填充(fill)或复制(copy)大块内存数据。
  • 构造和析构基本工具

    具体看 <stl_construct.h> 源码,功能是构造和析构操作。

  • 空间的配置和释放,std::alloc

    • 向 system heap 要求空间
    • 考虑多线程(multi-threads)状态
    • 考虑内存不足时的应变措施
    • 考虑过多 “小型区块” 可能造成的内存碎片问题

    对象构造前的空间配置 和 对象析构后的空间释放,具体看 <stl_alloc.h>

SGI STL 空间配置器的分析

考虑到小型区块可能造成内存碎片问题,SGI 采用两级配置器,第一级配置器直接使用 malloc() 和 free() 实现;第二级配置器使用 memory pool 内存池管理。

第二级配置器的原理:

  • 当配置区块超过 128 bytes,就使用第一级配置器
  • 当配置区块小于 128 bytes,使用内存池管理


参考:
1、https://github.com/steveLauwh/SGI-STL
2、STL源码剖析

相关文章

  • allocator详解

    STL空间配置器allocator详解

  • 配置器(allocator)

    配置器(allocator) 配置器:负责空间配置与管理,从实现的角度来看,配置器是一个实现了动态空间配置、空间管...

  • C++STL源码学习心得

    配置器allocator 对于stl使用者基本接触不到allocator,需要分析源码才可以接触到allocato...

  • SGI空间配置器

    标准配置器 SGI定义有一个符合标准的配置器std::allocator,但这个配置器并没有对内存分配做任何优化,...

  • 2.1 空间配置器(allocator)

    空间配置器隐藏在一切组件之后。 1.1 设计一个简单的空间配置器 根据STL的规范,以下是allocator的必要...

  • STL源码剖析——空间配置器Allocator

      由于感觉博客园的技术氛围更为浓郁,所以打算以后的学习总结都改投博客园,但是并不意味着这个号就不再更新了,我会把...

  • (1) SGI的Allocator分析

    C++标准的内存配置和释放动作: 在sgi STL中:内存配置--> alloc::allocator()内存释放...

  • STL空间适配器

    配置器 空间适配器的标准接口 内存分配释放与构造析构 为了精密分工,STL allocator决定将这两阶段操作区...

  • c++ 9.2.0 . allocator(1)new_allo

    allocator源码解析之new_allocator: new_allocator malloc_allocat...

  • c++ 9.2.0 . allocator(2)malloc_a

    allocator源码解析之malloc_allocator: new_allocator malloc_allo...

网友评论

      本文标题:配置器(allocator)

      本文链接:https://www.haomeiwen.com/subject/kgusbctx.html