STL空间配置器分析

今天阅读了《STL源码剖析》了解了一下stl中空间配置器的原理,一下进行分析总结


STL中对于空间的配置与释放 std::alloc

在stl中对象构造前的空间配置和对象释放后的空间释放,是由
stl_alloc.h负责的,下面来分析一下源码,理解它的原理

在这之前需要了解一下malloc()的原理,内存分配原理malloc实现机制

首先我们知道无论是c还是c++,其实内存的申请与释放都是由malloc( )和free()来完成的,但malloc()在申请空间时,对于小片内存的申请,也就是小于128k的内存申请是有缺陷的,会造成“外碎片”(与后面说到的内碎片区分)的问题,以及频繁向系统申请小块内存,效率非常低

所以总结来说,为什么需要空间配置器?

  1. 解决内存碎片问题
  2. 频繁向系统申请小块空间,效率低

1、一级&二级空间配置器

这里写图片描述
考虑了内存碎片的问题,设计了两种配置器,

  • 一级空间配置器,就是直接封装了malloc()和free()
  • 二级空间配置器,根据具体情况采用不同的方法分配空间
    • 小于128k,有一个内存池和一个自由链表来实现内存的管理
    • 大于128k,调用一级空间配置器

其实我们发现其实二级空间配置器,主要就是对小空间申请的优化,主要的优化方法,也就是用一个内存池和一个自由链表实现的,所以我们主要来研究一下这两个东西是如何来优化小空间申请的内存碎片问题的

1)一级空间配置器

这里写图片描述

源码中,一级空间配置器的申请空间与释放空间就是封装的malloc和free,malloc失败,内存不足时,调oom_malloc,进行内存释放
这里写图片描述

二级空间配置器

猜你喜欢

转载自blog.csdn.net/lindaxym/article/details/80614964