1. SGI提供了标准配置器std::allocator但是一般不用它,因为它效率不佳仅仅是把::operator new 和 ::operator delete做了一层薄薄的封装。

2. SGI使用时std::alloc作为默认的配置器。

a.alloc把内存配置和对象构造的操作分开,分别由alloc::allocate()::construct()负责,同样内存释放和对象析够操作也被分开分别由alloc::deallocate()和::destroy()负责。这样可以保证高效,因为对于内存分配释放和构造析够可以根据具体类型(type traits)进行优化。比如一些类型可以直接使用高效的memset来初始化或者忽略一些无痛无氧析够函数。对于内存分配alloc也提供了2级分配器来应对不同情况的内存分配。

b.第一级配置器直接使用malloc()和free()来分配和释放内存。第二级视情况采用不同的策略:当需求内存超过128bytes的时候,视为足够大,便调用第一级配置器;当需求内存小于等于128bytes的时候便采用比较复杂的memeory pool的方式管理内存。

c.无论allocal被定义为第一级配置器还是第二级,SGI还为它包装一个接口,使得配置的接口能够符合标准即把配置单位从bytes转到了元素的大小:

template<class T, class Alloc>

class simple_alloc

{

public:

static T* allocate(size_t n)

{

return 0 == n ? 0 : (T*)Alloc::allocate(n * sizeof(T));

}

static T* allocate(void)

{

return (T*) Alloc::allocate(sizeof(T));

}

static void deallocate(T* p, size_t n)

{

if (0 != n) Alloc::deallocate(p, n * sizeof(T));

}

static void deallocate(T* p)

{

Alloc::deallocate(p, sizeof(T));

}

}

d.内存的基本处理工具,它们均具有commt or rollback能力。

template<class InputIterator, class ForwardIterator>

ForwardIterator

uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result);

template<class ForwardIterator, class T>

void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x);

template<class ForwardIterator, class Size, class T>

ForwardIterator

uninitialized_fill_n(ForwardIterator first, ForwardIterator last, const T& x)

转载于:https://www.cnblogs.com/SweetDream/archive/2008/11/18/1335544.html

空间配置器(allocator)相关推荐

  1. C++ 空间配置器(allocator)

    C++ 空间配置器(allocator) 在STL中,Memory Allocator 处于最底层的位置,为一切的 Container 提供存储服务,是一切其他组件的基石.对于一般使用 STL 的用户 ...

  2. STL_空间配置器allocator

    空间配置器 所有的STL的操作对象(所有的数值)都存放在容器内,而容器一定要配置空间才能存放资料 空间配置器的标准接口 typedef unsigned int size_t: allocator:: ...

  3. 一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)

    Table of Contents 0.引入 1.标准的空间配置器allocator 2.更为高效的空间配置器alloc 2.1----对象的构造与析构 2.1.1 对象的构造:::construct ...

  4. 【《STL源码剖析》提炼总结】 第1节:空间配置器 allocator

    文章目录 一. 什么是空间配置器 二. STL allocator的四个操作: allocate,deallocate,construct,destroy `construct()` `destroy ...

  5. 《STL源码剖析》读书笔——(1)空间配置器

    第二章 空间配置器(allocator) 空间配置器按我的理解就是C++ STL进行内存管理的组件(包括内存的申请和释放):当然,不只是内存,还可以向硬盘申请空间: 我主要看了内存的配置与释放(这里& ...

  6. STL笔记(二)---空间配置器

    一.概述 allocator是STL的六大组件之一,空间配置器.其作用就是为各个容器管理内存(内存开辟 内存回收).allocator配置的对象不只是内存,它也可以向硬盘索取空间.使用STL库的时候不 ...

  7. 深度剖析SGI STL二级空间配置器内存池源码

    文章目录 一.SGI STL二级空间配置器重要成员解读 二. 二级空间配置器内存池的结构 三. 两个重要的函数 1. _S_round_up 2. _S_freelist_index 四. 内存池al ...

  8. 复习SGI STL二级空间配置器(内存池) | 笔记自用

    前言 在以前学习C++的时,写过一些剖析STL空间配置器的文章,如今回头再看一遍,想着复习一下. SGI STL空间配置器: [该目录中查看] SGI STL包含了一级空间配置器和二级空间配置器,其中 ...

  9. 489-剖析SGI STL空间配置器

    引言 不管是C的malloc free 还是C++的new delete,底层涉及内存管理调用的都是malloc,free,malloc和free是C的库函数. 如果我们在应用场景中涉及小块内存的开辟 ...

  10. SGI STL源码剖析——空间配置器

    SGI STL源码剖析--空间配置器 前言 空间配置器 SGI空间配置器 内存配置和对象构造 构造和析构 空间的配置和释放 第一级配置器 第二级配置器 空间配置 重新填充 重中之重的内存池 前言    ...

最新文章

  1. ubuntu 13.04 gnome terminal打开默认最大化方法
  2. OpenGL coordinate systems坐标系统的实例
  3. SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
  4. Unity MegaFiers 顶点动画
  5. 程序员的大恩人永远地离开了
  6. SQL中创建外键约束
  7. docker监听通信
  8. 数据库sql语句日期查询
  9. 论strpos 的正确使用方式
  10. 从零开始学习Java设计模式 | 软件设计原则篇:依赖倒转原则
  11. 图像处理之基础---去污算法
  12. 宏碁暗影骑士擎AN515-58原厂预装Windows11恢复镜像oem系统
  13. 初学者-CSS思维导图(下)
  14. 在阿里云 ACK 上部署 EMQX MQTT 服务器集群
  15. 用 Python 进行金融数据可视化
  16. 注册表编程,程序记忆功能
  17. GRE计算机专项考试题(98) (转)
  18. go 发送nats消息提示no response from stream
  19. python需要数学知识吗_入门机器学习到底需要多少数学知识
  20. 通过线路输入功能快速创建吉他谱

热门文章

  1. [转载]利用TTL值来鉴别操作系统
  2. JAVA.SQL.SQLEXCEPTION: INCORRECT STRING VALUE: '\XF0\X9F\X92\X94' FOR COLUMN 'CONTENT' AT ROW 1
  3. Mac python入门:安装python并新建python项目
  4. 打造Vim作为前端IDE
  5. 面试官:有没有比读写锁更快的锁?
  6. 为什么我们放弃了微服务?
  7. 从纯技术到技术管理,那些跌宕起伏的转型经历
  8. 又一个程序员在工位上倒下了!
  9. 趣图:程序猿和运维狗的工作日常……
  10. 音频杂音问题_OBS直播出现杂音或者电流声、没声音或者调大音量等操作