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