c++ - 第25节 - STL之空间配置器

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.什么是空间配置器

空间配置器顾名思义就是为各个容器高效的管理空间(空间的申请与回收)在默默地工作。虽然在常规使用STL时可能用不到它但站在学习研究的角度学习它的实现原理对我们有很大的帮助。

2.为什么需要空间配置器

前面在模拟实现vector、list、map、unordered_map等容器时所有需要空间的地方都是通过new申请的虽然代码可以正常运行但是有以下不足之处
\bullet 空间申请与释放需要用户自己管理容易造成内存泄漏
\bullet​​​​​​​ 频繁向系统申请小块内存块容易造成内存碎片
\bullet​​​​​​​ 频繁向系统申请小块内存影响程序运行效率
\bullet​​​​​​​ 直接使用malloc与new进行申请每块空间前有额外空间浪费因为每块空间都要开额外的内存空间记录这块空间的大小
\bullet​​​​​​​ 申请空间失败怎么应对
\bullet​​​​​​​ 代码结构比较混乱代码复用率不高
\bullet​​​​​​​ 未考虑线程安全问题

因此需要设计一块高效的内存管理机制。


3.SGI-STL空间配置器实现原理

在windows和Linux下都有直接向堆申请空间的接口windows下接口为VirtualAllocLinux下接口为brk。malloc是封装了irtualAlloc和brk在VirtualAlloc和brk之上malloc本身其实也是一个内存池该内存池是面向整个程序的。空间配置器对malloc进行封装 其是在malloc之上针对STL容器来设计的空间配置器是一个内存池该内存池仅面向STL的容器。

第二节中提到的几点不足之处最主要还是频繁向系统申请小块内存造成的。那什么才算是小块内存SGI-STL以128字节作为小块内存与大块内存的分界线将空间配置器其分为两级结构一级空间配置器处理大块内存二级空间配置器处理小块内存。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++