STL内存分配器:allocator
一、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相关推荐
- C++: STL内存分配器--allocator
STL内存分配器--allocator 一.STL内存分配器 二.STL allocator 一.STL内存分配器 分配器(allocator))是C ++标准库的一个组件, 主要用来处理所有给定容器 ...
- 内存分配器ptmalloc,jemalloc,tcmalloc调研与对比
内存分配器ptmalloc,jemalloc,tcmalloc调研与对比 rtoax 2020年12月 1. 概述 内存管理不外乎三个层面,用户程序层,C运行时库层,内核层.allocator 正是值 ...
- ptmalloc、tcmalloc与jemalloc内存分配器对比分析
目录 背景介绍 ptmalloc 系统向看ptmalloc内存管理 用户向看ptmalloc内存管理 线程中内存管理 Chunk说明 tcmalloc 系统向看tcmalloc内存管理 用户向看tcm ...
- C++STL学习笔记(4) 分配器(Allocator)
在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...
- [转]STL的内存分配器
题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...
- STL源码:分配器 allocator
operator new() 和 malloc() operator new()就是调用malloc来申请内存空间 所有的分配内存操作最终都将落在 malloc 上.malloc分配的实际内存要比申请 ...
- 内存分配器 (Memory Allocator)
对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法.来UC前,我就是这样认为的.实际深入进去时,才发现这个领域里也是百家争鸣,非常热闹.有操作系统 ...
- 内存分配器(Memory Allocator)
原文链接 : https://yq.aliyun.com/articles/254033 对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法.来U ...
- Eigen内存分配器aligned_allocator
在使用Eigen的时候,如果STL容器中的元素是Eigen数据库结构,比如下面用vector容器存储Eigen::Matrix4f类型或用map存储Eigen::Vector4f数据类型时: vect ...
最新文章
- 运算符及题目(2017.1.8)
- sdk没有登录什么意思_不需要接入SDK的第三方登录及分享
- 热加载和热部署,没听过?看看 Tomcat 是怎么实现的
- Hive group by实现-就是word 统计
- Linux设备驱动程序 第三版 读书笔记(一)
- 队列同步器 AbstractQueuedSynchronizer
- skywalking环境搭建及使用
- 【IDEA】IDEA git log 点击 没有代码变更
- python获取linux本机IP
- kettle中止是怎么用的_【Kettle】第一篇,Pan 的使用
- 金蝶专业版怎么反过账当月_金蝶kis怎么反记账-反过账-反结账
- LCD1602简易驱动程序
- 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁
- 「小车看百度,大车看深兰」,自动驾驶公交驶向千亿蓝海市场
- iOS获取本地音乐文件
- mysql 性能优化方向
- Java使用当前日期加四位数实现每日自增单号工具类
- ubuntu下启动wifi
- 2022-05-19 列式数据库-Clickhouse
- Linux系统实现访问localhost(127.0.0.1)浏览WWW网站目录