一、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. 链表问题3——删除链表的中间节点(初阶)
  2. Origami – 用于 Quartz 的免费的交互设计框架
  3. 036_PageHeader页头
  4. CAD2015软件安装资料及教程
  5. java reader_Java Reader reset()方法与示例
  6. Emlog文章特色图生成插件分享
  7. HTML textarea控件
  8. pytorch Alexnet
  9. 2019三星比2018好在哪_高端人士的选择: 三星w2019与三星w2018相比, 是什么让它如此价值不菲...
  10. 安装rpcbind出错
  11. BoundsChecker 使用
  12. Job for DmServiceDMSERVER.service failed because the control process exited with error code. Se
  13. 美图android手机刷机教程,美图手机如何刷机
  14. [KALI系列第四章]进行ARP断网攻击,包含安装方法
  15. 利用空闲服务器搭建frps服务端-实现穿透代理
  16. 报错:java.lang.NullPointerException 空指针异常
  17. 壞壞老婆VS傻傻老公
  18. win10安装graph_tool,在jupyter notebook运行代码
  19. BCIduino转载|3D打印机使用的日常问题汇总
  20. 300 页图解网络 PDF 下载

热门文章

  1. AIX 3D32B80D 错误
  2. Hibernate最佳实践
  3. Quartz.net官方开发指南 第五课: SimpleTrigger
  4. windows安装ngnix
  5. JDBC第一篇之获得数据库连接
  6. 新浪微博登录密码加密函数 wsse加密算法说明
  7. CCNA实验解析——VLAN间的路由的配置
  8. Postgresql死锁的处理
  9. goland 创建工程(go mod)singo
  10. python pip 安装错误 EnvironmentError: mysql_config not found