C++技术问题总结-第8篇 STL内存池是怎么实现的
2014-09-04 10:15
459 查看
STL内存池机制,使用双层级配置器。第一级采用malloc、free,第二级视情况采用不同策略。这种机制从heap中要空间,可以解决内存碎片问题。
1.内存申请流程图
简要流程图如下。
2.第二级配置器说明
第二级配置器目的解决小型区块造成的内存碎片问题。
使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则上调至32。
free-list节点结构
union obj
{
union obj* free_list_link;
char client_data[];
};
有16个free-lists,各自管理大小分别为8、16、24、32、40、48、56、64、72、80、88、96、104、112、120、128 bytes的小额区块。
申请流程如下。
释放流程如下。
1.内存申请流程图
简要流程图如下。
2.第二级配置器说明
第二级配置器目的解决小型区块造成的内存碎片问题。
使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则上调至32。
free-list节点结构
union obj
{
union obj* free_list_link;
char client_data[];
};
有16个free-lists,各自管理大小分别为8、16、24、32、40、48、56、64、72、80、88、96、104、112、120、128 bytes的小额区块。
申请流程如下。
释放流程如下。
相关文章推荐
- C++技术问题总结-第8篇 STL内存池是怎么实现的
- C++学习总结_成员函数的声明和实现需要注意问题
- C++技术问题总结-第0篇 类型转换
- C++技术问题总结-第0篇 类型转换
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- C++技术问题总结-第11篇 网络通信中主机序网络序
- 动态规划的简要总结和四个经典问题的c++实现
- C++技术问题总结-第13篇 调用约定有哪些,有什么不同
- 问题六十四:怎么用C++实现二叉查找树(binary search tree)及其相关操作
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- C++技术问题总结-第9篇 智能指针
- C++技术问题总结-第4篇 TCP与UDP
- C++技术问题总结-第11篇 网络通信中主机序网络序
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- C++技术问题总结-第2篇 进程通信
- C++技术问题总结-第6篇 STL迭代器相关
- C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合
- C++技术问题总结map、vector、list、deque各自的使用场合
- C++技术问题总结-第12篇 设计模式原则