STL源码剖析之allocator[WIP]
Author |
Guodong Zhu |
Version |
0.1.0 |
内存配置器的功能定位是什么?
在进入内存配置器的源码阅读之前,先思考这样一个问题:STL为什么需要内存配置器这样一个组件?换句话说,STL提供这样一个组件,有什么收益?
我们先来看内存分配本身,它是操作系统内核对内存实施管理(主要是分页)之后,提供的一种 按需使用堆内存 的手段。比如:当应用程序需要堆上内存时,就可以调用malloc这类接口,告诉内核:我需要占用多大多大的连续内存,在我告诉你不再需要之前,你不能给别的程序啊。当然,内核可以说,我现在没法帮你占住这块内存,这样调用也就失败了,但是一旦成功,也就表示内核确实帮忙占住了内存,完成了对应用程序的承诺。这是内存分配动作的主要内容,归纳起来,内存分配是将堆上内存作为一种公共资源,由应用按需申请使用的过程。
那么,为什么C++的STL为什么要抽出内存配置器组件?直接用malloc/calloc等C接口,或者C++自身的new运算符等,不可以吗?从C++语法层面,是可以的;从STL希望实现的职能角度,这种是一种不好的做法。为什么这么说呢?我们平时写的玩具C++代码里面,就经常会使用new来实例化对象,这本身就是C++支持的最基本的运算符之一,从这个角度看,不用抽出内存配置器这个概念,需要内存就调用new即可。但是,STL本身的目的是提供一个C++基础库,帮用户造好最基本的轮子。