跳至主要內容

总结

张威大约 1 分钟c/c++SGI STL源码

总结

SGI STL二级空间配置器内存池的实现优点:

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

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