博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL中的Allocator
阅读量:4256 次
发布时间:2019-05-26

本文共 797 字,大约阅读时间需要 2 分钟。

最近在看STL,写一点博客。

关于一些细节可能就不放上来了,就写一些我自己的心得。

1.为什么要用Allocator

C++容器的设计思路是,对存放到里面的东西是拷贝一份放进去。

而且里面的空间都是动态分配的。

所以在构建容器的时候,需要必要的①内存分配②构造对象。

2.new operator、operator new、placement new

(1)new operator

就是我们平时所使用的new/delete

new包含的,意思包括①分配内存②构造对象

(2)operator new

用来分配内存,相当于malloc

operator delete相当于free

(3)placement new

用来构造对象,需要给出指定的地址,以及传递给构造函数的参数

3.SGI STL的allocator

在侯捷剖析的STL中,有2个内存分配器

①std::allocator

这个是符合STL的allocator标准的分配器,实现就是采用的operator new 和 operator delete

②alloc

这个是当时的SGI STL自己所使用的默认内存分配器

分了两层机制

第一层,分配128Bytes以上的,采用的是malloc和free来分配内存

第二层,分配128Bytes以下的,采用的是memory pool的概念

程序再使用二层的时候,直接向free_list申请内存,如果free_list不足,它再向memory pool申请

memory pool是一段很大的连续内存,而memory pool不足的情况下,再向heap malloc内存。

4.当前的GCC的实现

GCC是基于SGI实现的。

但是我现在所使用的GCC 4.9.2,的容器stl_vector、stl_list等都没有使用alloc作为默认的,而是直接使用std::allocator了。

转载地址:http://lniei.baihongyu.com/

你可能感兴趣的文章
C++中的trivial、standard layout、POD
查看>>
阿里中间件三大存储系统
查看>>
Tair源码阅读1---ConfigServer
查看>>
STL中的RB-tree
查看>>
STL中的Sort
查看>>
LeetCode---3.TreeEasy
查看>>
基于比较的排序算法的最优下界---NlogN
查看>>
Paxos协议学习---2.由3大条件证明一致性
查看>>
Paxos协议学习---3.Paxos Made Simple
查看>>
C/C++输入输出
查看>>
泸州NGN属南气矿工程----华为s2600磁盘阵列问题解决
查看>>
泸州属南气矿----配置S2600磁盘阵列报错:There is no master controller.
查看>>
SQL 调优1
查看>>
OA报账规范(出差专用)
查看>>
生产库快速关闭数据库
查看>>
差异增量备份和累积增量备份的差别
查看>>
ASM 无法发现候选磁盘组----grid 11.2.0.3 asm 自检通不过 prvf-5184
查看>>
ASM 无法发现候选磁盘组----丢失的ASM磁盘组 ASM的磁盘组无法挂载
查看>>
Oracle 10g配置单向stream流复制,完整记录
查看>>
ORA-00845 MEMORY_TARGET not supported on this system
查看>>