本篇内容主要介绍STL六大组件之一的空间配置器(alloctor),其分为一级空间配置器和二级空间配置器,二级空间配置器主要是为了解决小内存分配时产生的碎片化问题,实现思想是内存池。原文链接:https://mp.weixin.qq.com/s/eTULOCRR7AzhANAvYbOKbw
引言
new分配内存主要含有两阶段操作
1.调用operator new分配内存;
2.调用类的构造函数构造对象内容;
delete释放内存也含有两阶段操作
1.调用析构函数将对象析构;
2.调用operator delete释放内存。
例:class Foo{...};
//配置内存,然后构造对象
Foo pf = new Foo;
//将对象析构,然后释放内存
dedlete pf;
为了精密分工,STL allocator决定将两阶段操作区分开来。
对于具体的实现细节可参考《STL源码剖析》,这里面主要给大家一些概念,相当于总览。接下来重点说一下STL空间配置器中内存分配,这部分在面试中可以作为自己的亮点,比说说超过128byte分配,小于128byte时二级配置器的分配方式,为什么要分成两种配置方式(因为分配小内存会存在内存碎片的问题)。
STL内存分配示意图
内存分配流程图
第一级空间配置器
代码
为什么使用malloc而不是new分配内存?
全部评论
(0) 回帖