STL的简单了解(六大组件)

STL提供了六大组件,彼此可以组合套用

容器:就是各种数据结构 eg:vector 、list、deque等等

算法:各种常用的算法     eg: sort 、swap等等

迭代器:所有的STL容器都附带有自己专属的迭代器;并且原生指针也是一种迭代器

仿函数:行为类似函数;从实现的角度看,仿函数是一个重载了operator()的类或者类模板

配接器:一种用来修饰容器或仿函数或迭代器接口的东西  eg:queue、stack

空间配置器:负责空间配置与管理。从实现角度来看,配置器是一个实现了动态空间配置,空间管理、空间释放的类模板。

 

 从上面的六大组件之中,我们还可以了解到两种设计模式:适配器模式和迭代器模式

 

 

 

 

 

 

 

 

空间配置器:

空间配置器是一个双层配置器,考虑到了小型区块所可能造成的内存破碎问题。

当配置区块超过128字节时,认为“所需空间足够大”,便调用第一级配置器。当配置区块小于128字节时,认为"过小",就调用用第二级配置器。

第一级配置器:封装了malloc和free,(并且模拟C++的set_new_handler()以处理内存不足的情况)空间不足等异常处理机制

第二级配置器:维护了16种自由链表,负责16种小型区块的次配置能力(内存池);

                            内存不足,或者需要空间大于128字节时,就会去调用第一级配置器;

 第二级配置器,是以内存池管理的:每一次配置一大块内存,并维护对应的自由链表。下次若再有相同大小的空间需求的时候,直接从自由链表中取;如果取出的内存不在使用,则又由配置器归还给自由链表。

这样,可以解决频繁向系统申请小块内存造成的低效率,以及内存碎片的问题。

自由链表类似于哈希桶的结构,当我们需要一块8字节的空间时,只需要从对应的自由链表下,去取下一个对应的节点;但是我们如果不取如下图所示的字节的时候,例如我们需要50字节;这个时候,为了方便管理,第二配置器会主动将任何小额区块的内存需求量上调至8的倍数。也就是我们申请50字节的时候,会去自由链表56字节的位置取节点。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值