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
原创粉丝点击