17 分配器Allocator和容器间的关系(学自Boolean)
来源:互联网 发布:syslog apache 编辑:程序博客网 时间:2024/06/01 20:52
1、概述
STL中的分配器是用于给容器Containers分配内容和释放内存的,即进行容器的内存管理,通常我们使用容器的时候都是使用默认的分配器,当然你也可以自己去定制一个分配器。
2、分配器的一般原理
- 一般容器分配内容都是通过分配器最后调用operator new()方法实现,而operator new()会调用malloc()函数;
- 一般容器释放内存都是通过分配器最后调用operator delete()方法实现,而operator delete()会调用free()函数;
3、STL容器定义
容器使用泛型编程方式实现,模板中的第二个参数就是定义的分配器:
说明:template中第二个参数allocator<_Ty>就是默认的分配器,它是一个模板类。
4、分配器的定义
分配器是通过模板类定义的,不同的版本的STL库所带的分配器定义都不同。下面是VC6所附的标准库解析:
解析:
a、allocator类定义通过函数allocate()和deallocate()来实现内存分配和释放;
b、可以通过如下方式进行创建内存和释放内存:
int * p = allocator<int>().allocate(120,(int *)0);allocator<int>().deallocate(p,120);c、使用malloc分配的内存会带有额外的开销,通常是内存头尾的cookie,可以记录大小;
d、因为allocate()方法,第二个参数要指定分配数据的类型,VC的分配器不适合直接使用,但是给容器使用没有问题;
5、容器之间的关系
在STL中,容器是用泛型编程的方式实现,其中序列式容器和关联式容器是用复合的方式实现,如下图所示:
说明:上图通过缩排方式表示容器间关系,如stack和queue容器中含有deque,是通过deque实现;set和map容器含有rb_tree是通过rb_tree实现。
阅读全文
0 0
- 17 分配器Allocator和容器间的关系(学自Boolean)
- 20 容器vector的深度探索(学自Boolean)
- 遵照std::allocator实现自定制的内存分配器
- 15 STL中容器双向链表list和单向链表forward_list(学自Boolean)
- 16 STL集合和映射容器set/multiset_map/multimap(学自Boolean)
- 32 moveable元素对于容器速度的影响(学自Boolean)
- 13 STL中数组容器array(学自Boolean)
- 14 STL中容器vector(学自Boolean)
- 18 容器之list探索(学自Boolean)
- 21 容器deque&queue&stack深度探索(学自Boolean)
- 03 C++中复合、委托和继承的基本用法(学自Boolean)
- 11 关于C++中的new和delete(学自Boolean)
- 29 x适配器ostream_iterator和istream_iterator(学自Boolean)
- 31 tuple和type trait用例(学自Boolean)
- 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- boot memory allocator——自举内存分配器(二:在IA-32系统下的初始化)
- 09 C++Reference引用的用法(学自Boolean)
- Microsoft Word 2010
- 游戏服务邮箱229401871@qq.com
- LeetCode Reverse Integer
- 121. Best Time to Buy and Sell Stock
- 1.UNIX 环境高级编程--UNIX基础知识
- 17 分配器Allocator和容器间的关系(学自Boolean)
- 李笑来《财富自由之路》读书笔记(Ⅰ)
- 欢迎使用CSDN-markdown编辑器
- iptables防火墙的设置
- xml解析工具类
- 转 设计模式
- 【百度AI人脸核身+公安验证】IOS示例工程运行
- ios 应用打开 图片 文档
- 剑30-最小的K个数