电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

STL内存分配器VIP免费

STL内存分配器_第1页
1/9
STL内存分配器_第2页
2/9
STL内存分配器_第3页
3/9
题记:内存管理一直是C/C++程序的红灯区。关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如 C++中 new和 delete应该成对出现,用 RAII技巧管理内存资源,auto_ptr等方面,很多 C/C++书籍中都使用技巧的介绍。另一类是内存管理的实现,如 linux内核的slab分配器,STL中的allocator实现,以及一些特定于某种对象的内存管理等。最近阅读了一些内存管理实现方面的资料和源码,整理了一下,汇编成一个系列介绍一些常用的内存管理策略。 1. STL 容器简介 STL 提供了很多泛型容器,如 vector,list 和 map。程序员在使用这些容器时只需关心何时往容器内塞对象,而不用关心如何管理内存,需要用多少内存,这些 STL 容器极大地方便了 C++程序的编写。例如可以通过以下语句创建一个 vector,它实际上是一个按需增长的动态数组,其每个元素的类型为 int 整型: stl::v ector array ; 拥有这样一个动态数组后,用户只需要调用 push_back 方法往里面添加对象,而不需要考虑需要多少内存: array .pu sh_back(10); array .pu sh_back(2); vector 会根据需要自动增长内存,在 array 退出其作用域时也会自动销毁占有的内存,这些对于用户来说是透明的,stl 容器巧妙的避开了繁琐且易出错的内存管理工作。 2. STL 的默认内存分配器 隐藏在这些容器后的内存管理工作是通过 STL 提供的一个默认的allocator 实现的。当然,用户也可以定制自己的allocator,只要实现 allocator 模板所定义的接口方法即可,然后通过将自定义的allocator 作为模板参数传递给 STL 容器,创建一个使用自定义 allocator的STL 容器对象,如: stl::v ector array ; 大多数情况下,STL 默认的allocator 就已经足够了。这个 allocator 是一个由两级分配器构成的内存管理器,当申请的内存大小大于 128byte 时,就启动第一级分配器通过 malloc 直接向系统的堆空间分配,如果申请的内存大小小于 128byte 时,就启动第二级分配器,从一个预先分配好的内存池中取一块内存交付给用户,这个内存池由 16 个不同大小(8 的倍数,8~ 128byte)的空闲列表组成,allocator 会根据申请内存的大小(将这个大小 round up 成 8 的倍数)从对应的空闲块列表取表头块给用户。 这种做法有两个优点: 1)小对象的快速分配。小对象是从内存池分配的,这个内存池是系统调用一次 m...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

STL内存分配器

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部