17 分配器Allocator和容器间的关系
2017-11-29 23:38
267 查看
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实现。
相关文章推荐
- 17 分配器Allocator和容器间的关系
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- 实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- 侯捷STL学习(五)--allocator和容器之间的实现关系
- 17 :多台物理机间的容器连接
- JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系
- 白话servlet容器和selvert的关系?
- jvm实例,tomcat容器,spring容器,在内存中的关系
- jdk1.4容器类关系图
- spring 和 springmvc 的父子容器关系浅析
- 关于JFrame,JPane及其它容器的层次关系????
- 深入浅出 Java Concurrency (17): 并发容器 part 2 ConcurrentMap (2)
- Spring和SpringMVC父子容器关系初窥
- RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17)
- 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器
- web容器 web服务器 servlet/jsp容器 之间的区别和关系
- Spring与SpringMVC的容器关系分析