STL源码解析 allocator (三) 第二级配置
发布时间
阅读量:
阅读量
文章结构概览
- 引言
-
一、二级空间管理模块__default_alloc_template
-
二、实现代码
-
- 1.内存的申请与释放操作
- 2.对free_lists的重新补给
- 3.内存池机制
-
结论
-
前言
在前一篇博客中已经对第一级空间配置器进行了介绍,其中在第一级空间配置器的设计中,实际上仍然依赖于malloc函数完成内存的分配操作。当所需分配的内存空间较为有限时,采用malloc方式会带来诸如cookie等附加开销,从而造成资源浪费(相关内容可参考关于【内存管理
一、二级空间配置器__default_alloc_template
二级空间配置器在设计上引入了内存池机制,整体构思颇具创意。
1、设计思路:
(1)在需要分配大量小块内存时,每个小块都会附带cookie(用于记录该内存块的大小)等附加信息。考虑到这种设计会带来额外的空间占用,因此决定采用共享方式处理cookie,即多个相同大小的小块内存共用一个cookie。
(2)通过内存池实现对内存的分配与回收操作。具体而言,内存池利用自由链表进行管理,在STL中这一结构被命名为free_list。
(3)若直接使用链表方式进行空间分配,则需要借助指针指向后续节点,这将导致额外的内存开销。为减少
全部评论 (0)
还没有任何评论哟~
