当前位置: 首页 > 工具软件 > SGI STL > 使用案例 >

剖析SGI STL内存池总结

仲浩旷
2023-12-01

剖析SGI STL内存池总结

对于任何的池组件,比如内存池、线程池、连接池、协程池、进程池…
他们都有一个共同的特点:频繁的资源申请和释放,会有明显的时间开销。而池组件的通用作用,就是提前申请资源,交给池来处理,而不是用默认的处理方式。省去频繁的资源申请释放的时间和性能开销。

内存池的作用,就是防止频繁的小块内存分配释放,产生很多的内存碎片,防止出现没有连续的大内存块可以申请。

而SGI STL二级空间配置器由下面几个优点:

  1. 对于每次填充备用池,都是多申请一块,一部分分出去切成chunk块使用,剩下的存在备用池等待使用,备用池可以给任意大小的chunk提供。
  2. 对于备用池剩余的内存块如果不足以凑成一个申请的chunk块,会把这块剩余的内存串到对于大小的自由链表节点下提供使用,备用池内存用的干干净净,不会有丝毫浪费。
  3. 当chunk块申请失败时不是直接抛异常,有一个异常处理的过程:首先会去遍历比当前申请chunk块大的自由链表节点下有没有空闲的大chunk块,如果有就借一个出去使用;还是不成功还会去检查用户有没有设置释放资源的函数,然后再去尝试申请
 类似资料: