一、STL泛型容器 与 内存管理

1.1 STL泛型容器中隐藏了内存管理工作

STL提供了很多泛型容器,如vector,list,map等。程序员使用时之关心如何存放对象,不用关心如何管理内存。

容器会根据需要自动增长内存,在退出其作用域时,也会自动销毁占有的内存。

STL容器巧妙的避开了繁琐而且容易出错的内存管理工作。

二、STL默认的内存分配器

2.1 STL默认的内存分配器

隐藏在容器后的内存管理工作是通过STL提供的 一个默认的allocator实现的。

2.2 定制allocator

用户可以定制自己的allocator,只需要实现allocator模板所定义的接口方法即可,然后通过将自定义的allocator作为模板参数传递给STL容器。

创建一个使用自定义allocator的STL容器对象,如下:

vector<int, UserDefinedAllocator>  vec;

大多数情况下,STL默认的allocator就已经足够了。

三、STL默认内存分配器实现原理

3.1 分配器原理:两级分配器

      allocator是一个由两级分配器构成的内存管理器。

1. 当申请的内存大小大于128byte时,启动第一级内存分配器,通过malloc直接向系统的堆空间分配。

2. 当申请的内存大小小于128byte时,启动第二级内存分配器,从一个预先分配好的内存池中取一块内存交给用户。

这个内存池由16个不同大小(8个倍数,8~128byte)的空闲列表组成,allocator会 申请 的大小(将这个大小round up成8的倍数),从对应的空闲块列表取头块给用户。

3.2 优点

1.  小对象的快速分配。

2. 避免了内存碎片的生成。

STL内存分配器:allocator相关推荐

  1. C++: STL内存分配器--allocator

    STL内存分配器--allocator 一.STL内存分配器 二.STL allocator 一.STL内存分配器 分配器(allocator))是C ++标准库的一个组件, 主要用来处理所有给定容器 ...

  2. 内存分配器ptmalloc,jemalloc,tcmalloc调研与对比

    内存分配器ptmalloc,jemalloc,tcmalloc调研与对比 rtoax 2020年12月 1. 概述 内存管理不外乎三个层面,用户程序层,C运行时库层,内核层.allocator 正是值 ...

  3. ptmalloc、tcmalloc与jemalloc内存分配器对比分析

    目录 背景介绍 ptmalloc 系统向看ptmalloc内存管理 用户向看ptmalloc内存管理 线程中内存管理 Chunk说明 tcmalloc 系统向看tcmalloc内存管理 用户向看tcm ...

  4. C++STL学习笔记(4) 分配器(Allocator)

    在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...

  5. [转]STL的内存分配器

    题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...

  6. STL源码:分配器 allocator

    operator new() 和 malloc() operator new()就是调用malloc来申请内存空间 所有的分配内存操作最终都将落在 malloc 上.malloc分配的实际内存要比申请 ...

  7. 内存分配器 (Memory Allocator)

    对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法.来UC前,我就是这样认为的.实际深入进去时,才发现这个领域里也是百家争鸣,非常热闹.有操作系统 ...

  8. 内存分配器(Memory Allocator)

    原文链接 : https://yq.aliyun.com/articles/254033 对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法.来U ...

  9. Eigen内存分配器aligned_allocator

    在使用Eigen的时候,如果STL容器中的元素是Eigen数据库结构,比如下面用vector容器存储Eigen::Matrix4f类型或用map存储Eigen::Vector4f数据类型时: vect ...

最新文章

  1. 运算符及题目(2017.1.8)
  2. sdk没有登录什么意思_不需要接入SDK的第三方登录及分享
  3. 热加载和热部署,没听过?看看 Tomcat 是怎么实现的
  4. Hive group by实现-就是word 统计
  5. Linux设备驱动程序 第三版 读书笔记(一)
  6. 队列同步器 AbstractQueuedSynchronizer
  7. skywalking环境搭建及使用
  8. 【IDEA】IDEA git log 点击 没有代码变更
  9. python获取linux本机IP
  10. kettle中止是怎么用的_【Kettle】第一篇,Pan 的使用
  11. 金蝶专业版怎么反过账当月_金蝶kis怎么反记账-反过账-反结账
  12. LCD1602简易驱动程序
  13. 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁
  14. 「小车看百度,大车看深兰」,自动驾驶公交驶向千亿蓝海市场
  15. iOS获取本地音乐文件
  16. mysql 性能优化方向
  17. Java使用当前日期加四位数实现每日自增单号工具类
  18. ubuntu下启动wifi
  19. 2022-05-19 列式数据库-Clickhouse
  20. Linux系统实现访问localhost(127.0.0.1)浏览WWW网站目录

热门文章

  1. CentOS 7.4下Redis及集群的安装及配置
  2. Android studio Dialog 弹出式对话框
  3. sql service 从创建访问用户到数据库访问 【SQL】
  4. [svc]java初步
  5. 第二部分:IDEA 常用设置
  6. python开源项目及示例代码
  7. 雷观(十一):接私活有利有弊,我们应该根据自己的实际情况选择接私活
  8. PAT_A1148#Werewolf - Simple Version
  9. 网易博客迁移(2011-05-27)
  10. JavaScript知识精简