总结
大约 1 分钟
总结
SGI STL二级空间配置器内存池的实现优点:
- 对于每一个字节数的chunk块分配,都是给出一部分进行使用,另一部分作为备用,这个备用可以给当前字节数使用,也可以给其它字节数使用
- 对于备用内存池划分完chunk块以后,如果还有剩余的很小的内存块,再次分配的时候,会把这些小的内存块挂到
_S_free_list
的对应位置,再次分配出去,备用内存池使用的干干净净! - 当指定字节数内存分配失败以后,有一个异常处理的过程,查看
_S_free_list
从__size -> 128
字节所有的chunk块,如果哪个字节数有空闲的chunk块,直接借一个出去。如果上面操作失败,还会调用_S_oom_malloc
,其内部有一个预先设置好的malloc内存分配失败的回调函数,若分配不成功则会不停地调用次回调函数释放空间。若没设置回调函数,则直接malloc throw bad_alloc

源码阅读的方法:先拎清主要逻辑(主要干的什么),再关注侧枝(其他的函数),不要一行行的阅读,可以辅助画图理解