STL的内存池的设计源码分析和体会
来源:互联网 发布:2017淘宝双十一规则 编辑:程序博客网 时间:2024/04/29 07:31
在一些 服务器端程序设计的时候, 在申请内存 一般要用到内存池。 避免频繁的申请内存 带来的效率问题,
STL源码的 内存池 设计的是128个字节以内 有从内存池子里面去取,但是大于128 个字节了 直接去 malloc 了。
其实倒可以 去借鉴STL的源码 设计出 更满足实际需求的 内存池, 因为在实战中 可能大于128个字节,这要根据具体的数据结构去变化。
STL 在申请内存的时候 做了两级过滤,要是如果用户申请的内存小于128个字节,直接将申请的字节调整为 8的整数倍, 然后从其中去取。
到底是个怎样的情况呢 就是一个数组, 这个数组 每个元素 存放一个指针, 指向实际的内存。
STL里面是16个。 从第一个开始 分别管理的8个字节 16 个字节,32 个字节... 那么第16个 自然是16*8 = 128了哦。
假设 内存池是 free_list[16]; 那么free_list[0]存放的是 8个字节内存的首地址。 然后这个八个字节 指针域 指向 下一个8个字节的内存, 在默认状态下是20个这样的内存 连在一起的。
STL 在设计 这个区域的数据机构的时候用了联合union, 这个举动相当有才。 如果用结构体的话, 每个空闲链表都要多加四个字节的指针来存放, 实在不脱 ,不好安排。
union obj
{
union obj * next;
//数据
......
};
酱紫就避免了浪费 也好处理。
下次写文章 附上 实例代码。
- STL的内存池的设计源码分析和体会
- C++STL内存配置的设计思想与关键源码分析
- C++STL内存配置的设计思想与关键源码分析
- C++STL内存配置的设计思想与关键源码分析
- STL源码-内存的分配
- STL源码分析(1) -- STL介绍和源码分析之前的一些准备
- 需求分析费概要设计的体会
- 升级内存的体会
- 体会内存的释放
- prototype源码的体会
- 服务器设计和开发的体会
- 数据库设计的体会
- 应用软件开发过程中设计需求分析的一点体会
- STL源码:空间配置器(三)内存的配置和释放、SGI的两级适配器
- Linux内存使用的体会
- Linux内存使用的体会
- python 内存管理的体会
- Linux内存使用的体会
- Linux文件系统-3个重要数据结构及相互间的关系
- Coherence(2)配置
- CImage类库
- 开发备忘录
- mysql的SUBSTRING_INDEX 的使用
- STL的内存池的设计源码分析和体会
- linux下获取系统时间
- 使用httpclient模拟表单提交,上传图片
- 一个简单的IOCP(IO完成端口)服务器/客户端类(英文版)
- 常量与变量
- nginx基本配置与参数说明
- js中 计算两个日期间的工作日
- 安卓开发 解析GZIP压缩发送过来byte[]
- 终于搞定android驱动USB摄像头了!