看完了对象的构造行为和内存释放前的对象的析构行为,我们现在来看看内存的配置和释放。
对象构造前的空间分配和析构后的空间释放,定义在头文件<stl_alloc.h>中。其设计思想是:
- 向system heap要求空间。
- 考虑多线程状态。
- 考虑内存不足时的应变措施。
- 考虑过多“小额区块”可能造成的内存碎片问题。
C++的内存配置基本操作时::operator new(),内存释放的基本操作是::operator delete()。这是两个全局函数相当于C的malloc()和free()函数。是的,正是如此,SGI正是以malloc()和free()完成内存的配置和释放。
考虑到小型区块可能造成的内存破碎问题,SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器;当配置区块小于128bytes时,视之为“过小”,为。而且采用了复杂的内存池memory pool整理方式。整个设计究竟是只开放第一级配置器还是同事开放第二级配置器取决于宏__USE_MALLOC是否被定义。