Advertisement

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)

还没有任何评论哟~