关于《stl源码剖析》一书内存分配器中内存释放问题

KingI 2005-12-13 07:21:12
我想问一下在stl中的内存分配器使用二级分配器中分配内存,如果小于等于128k就会通过内存池来申请(内存池也是通过malloc()来获得内存的),可是当程序结束时,并没有释放内存池中内存的代码,(>128k调用free()), 难道这是内存泄露不成?
...全文
248 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlsue 2005-12-14
  • 打赏
  • 举报
回复
没注意看楼主的问题,温柔已经copy上来了,同意“温柔”这个指针。。。
睡在床板下_ 2005-12-14
  • 打赏
  • 举报
回复
我也正在看这本书, 你那个问题,我也没仔细 研究过,我只是 把 它的 适配器 大概看 懂了,你说的 这个二级分配器 太难懂了,我只看了一级的,感觉就是sgi stl 包装的太好了,果然是 一流程序员写的东西,呵呵~~ 看的 实在是很爽, 想和你交流 不只有兴趣否??
qq: 86122114
xlsue 2005-12-13
  • 打赏
  • 举报
回复
《STL源码剖析》是一本很棒的书。读的时候要把很东西东西结合在一起,C++的很多技术、技巧都有应用。也是提高自己模板功力的一个不错的机会。要多思考,多实践。。。
xlsue 2005-12-13
  • 打赏
  • 举报
回复
你先看看《effective c++》的对memory pool那节有关描述。
SGI STL的memory pool很有意思。它freelist数组,每个元素管理一个大小的链表,如果要分配一个X大小的内存,它会先做个小小的调整,然后再在freelist中查找管理那个大小的数组元素,而数组元素存贮着它所管理的一块块大小组成的链表的头指针。如果有,则调整链表,返回那个内存的指针,否则查看其它块有没有内存。。。如果释放内存,它会加到维护那个大小的链表中。。。
总之,它的实现很有意思。我也是大概看了一下,还没有更深入看它的全面代码。
Jinhao 2005-12-13
  • 打赏
  • 举报
回复
那块内存由内存池管理,不释放可以提升小块内存分配的效率
foochow 2005-12-13
  • 打赏
  • 举报
回复
引起内存泄露的原因在于内存分配后指向内存的指针丢失了.如果没有垃圾处理或其他语言之外的机制,这些内存就不会被收回.但上面的设计没有内存泄露,因为它决不会出现内存指针丢失的情况.内存泄漏和内存池有一个重要的不同之处.内存泄漏会无限地增长,即使客户循规蹈矩,而内存池的大小决不会超过客户请求内存的最大值.

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧