空间配置器(allocator)
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)相关推荐
- C++ 空间配置器(allocator)
C++ 空间配置器(allocator) 在STL中,Memory Allocator 处于最底层的位置,为一切的 Container 提供存储服务,是一切其他组件的基石.对于一般使用 STL 的用户 ...
- STL_空间配置器allocator
空间配置器 所有的STL的操作对象(所有的数值)都存放在容器内,而容器一定要配置空间才能存放资料 空间配置器的标准接口 typedef unsigned int size_t: allocator:: ...
- 一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)
Table of Contents 0.引入 1.标准的空间配置器allocator 2.更为高效的空间配置器alloc 2.1----对象的构造与析构 2.1.1 对象的构造:::construct ...
- 【《STL源码剖析》提炼总结】 第1节:空间配置器 allocator
文章目录 一. 什么是空间配置器 二. STL allocator的四个操作: allocate,deallocate,construct,destroy `construct()` `destroy ...
- 《STL源码剖析》读书笔——(1)空间配置器
第二章 空间配置器(allocator) 空间配置器按我的理解就是C++ STL进行内存管理的组件(包括内存的申请和释放):当然,不只是内存,还可以向硬盘申请空间: 我主要看了内存的配置与释放(这里& ...
- STL笔记(二)---空间配置器
一.概述 allocator是STL的六大组件之一,空间配置器.其作用就是为各个容器管理内存(内存开辟 内存回收).allocator配置的对象不只是内存,它也可以向硬盘索取空间.使用STL库的时候不 ...
- 深度剖析SGI STL二级空间配置器内存池源码
文章目录 一.SGI STL二级空间配置器重要成员解读 二. 二级空间配置器内存池的结构 三. 两个重要的函数 1. _S_round_up 2. _S_freelist_index 四. 内存池al ...
- 复习SGI STL二级空间配置器(内存池) | 笔记自用
前言 在以前学习C++的时,写过一些剖析STL空间配置器的文章,如今回头再看一遍,想着复习一下. SGI STL空间配置器: [该目录中查看] SGI STL包含了一级空间配置器和二级空间配置器,其中 ...
- 489-剖析SGI STL空间配置器
引言 不管是C的malloc free 还是C++的new delete,底层涉及内存管理调用的都是malloc,free,malloc和free是C的库函数. 如果我们在应用场景中涉及小块内存的开辟 ...
- SGI STL源码剖析——空间配置器
SGI STL源码剖析--空间配置器 前言 空间配置器 SGI空间配置器 内存配置和对象构造 构造和析构 空间的配置和释放 第一级配置器 第二级配置器 空间配置 重新填充 重中之重的内存池 前言 ...
最新文章
- ubuntu 13.04 gnome terminal打开默认最大化方法
- OpenGL coordinate systems坐标系统的实例
- SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
- Unity MegaFiers 顶点动画
- 程序员的大恩人永远地离开了
- SQL中创建外键约束
- docker监听通信
- 数据库sql语句日期查询
- 论strpos 的正确使用方式
- 从零开始学习Java设计模式 | 软件设计原则篇:依赖倒转原则
- 图像处理之基础---去污算法
- 宏碁暗影骑士擎AN515-58原厂预装Windows11恢复镜像oem系统
- 初学者-CSS思维导图(下)
- 在阿里云 ACK 上部署 EMQX MQTT 服务器集群
- 用 Python 进行金融数据可视化
- 注册表编程,程序记忆功能
- GRE计算机专项考试题(98) (转)
- go 发送nats消息提示no response from stream
- python需要数学知识吗_入门机器学习到底需要多少数学知识
- 通过线路输入功能快速创建吉他谱
热门文章
- [转载]利用TTL值来鉴别操作系统
- JAVA.SQL.SQLEXCEPTION: INCORRECT STRING VALUE: '\XF0\X9F\X92\X94' FOR COLUMN 'CONTENT' AT ROW 1
- Mac python入门:安装python并新建python项目
- 打造Vim作为前端IDE
- 面试官:有没有比读写锁更快的锁?
- 为什么我们放弃了微服务?
- 从纯技术到技术管理,那些跌宕起伏的转型经历
- 又一个程序员在工位上倒下了!
- 趣图:程序猿和运维狗的工作日常……
- 音频杂音问题_OBS直播出现杂音或者电流声、没声音或者调大音量等操作