5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码
参考文章错误处:第一级配置器直接使用malloc和free,第二级配置器则视情况:当配置区超过128Bytes使用一级配置器,否则采用复杂的内存池策略。
参考文章几处要点:
1 默认没有定义__USE_MALLOC所有默认二级配置器。下图的simple_alloc是封装的接口,使配置器的接口能符合STL规格
2 空间申请:联合体Union代表的是链表节点的结构。free_list的定义:static obj* volatile free_list[16]。说明free_list是个指针数组,每个格子里面内容是指向obj的指针。(每个格子指针都指向自由链表,链表节点有内容obj)
3 空间释放:*my_free_list总是指向第一个可用的空间。作为第二级配置器拥有配置器标准接口函数 deallocate()。该函数首先判断区块大小,大于 128bytes 就调用第一级配置器。小于 128bytes 就找出对应的 free_list,将区块回收。
4 内存池,书本P68配合图讲解