当前位置: 首页 > news >正文

Alexandresku设计的loki小对象内存分配器

Loki是由 Alexandresku 编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。其中有两个文件 SmallObj.h 、SmallObj.cpp 进行内存管理,可以单独进行使用

image

 


三个class,第一层是chunk,第二层是vector<chunk> FixedAllocator,第三层是vector<vector<chunk>> SmallObjallocator。第一层的chunk负责实际内存的管理,一个chunk管理一个unsigned char[blockSize * blocks]数组,第二层的vector<chunk>管理相同大小区块的内存,第三层vector<vector<chunk>>管理不同大小区块所有的内存。
chunk中含有 指向区块的指针pData & firstAvailableBlock 下一个分配区块索引值 & blocksAvailable 未分配区块数量。借用区块数组中的第一个byte做索引值(类似于嵌入式指针),初始化流水号标识索引,通过索引值组织成单向链表。firstAvailableBlock链表头索引,分配的时候,取出链表头索引对应的区块,然后更新链表头索引;释放一个区块的时候,先计算出释放的区块对应的索引值,然后更新链表头索引,类似头插法。判断是否还能分配或者全回收看blocksAvailable值。
FixedAllocator 中有指向分配和释放的两根指针(标出最近有分配动作的chunk,标出最近有释放动作的chunk)和 vector<chunk>。分配时候首先查看最近有分配动作的chunk是否还有空闲区块,如果没有就for遍历,找到就分配,找不到就再push_back一个chunk到该vector<chunk>中,交给下一层做分配动作。释放先找到释放的区块是在哪一个chunk中,然后交给下一层做释放区块动作。
SmallObjallocator 层管理不同大小区块所有的内存,每一个vector<chunk> 负责不同大小区块的管理。
特点:精简强悍,使用索引实现链表,有缓式回收设计。使用容器作为设计基础,设计出来的分配器也为容器服务,两者不相干扰。

参考:

https://segmentfault.com/a/1190000040206098

https://sourceforge.net/projects/loki-lib/files/Loki/

https://www.cnblogs.com/wuyun--wy/p/17650083.html

http://www.sczhlp.com/news/109938/

相关文章:

  • C++ 内存管理
  • wordpress建站工具湖南网站建设 莫道
  • 采票网站刷流水做任务d8 wordpress
  • 网站建设服务描述软件开发设计文档
  • 有做浏览单的网站wordpress新建字段
  • 什么网站有项目做微商分销平台有哪些
  • 有哪些企业建设网站台州百度关键词优化
  • 大连优化网站课程wordpress playlm版权
  • 江苏优化网站公司哪家好中山专业门户网站制作策划
  • 昆明市西山区建设局网站制作网站用什么软件有哪些
  • 外包做的网站 需要要源代码吗添加网站绑定主机名
  • 浅谈制氢电源及英飞凌解决方案
  • 微算法科技(NASDAQ:MLGO)研究分布式量子计算,释放量子计算潜能
  • AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢
  • Flash Attention原理
  • MSMQ 跨服务器读写队列的“消息队列系统的访问被拒绝”的解决方案
  • 广州市企业网站建设怎么样百度收录网站要多
  • 宁波网站营销推广制作怎么通过域名做网站
  • 微网站的建设南通通州区城乡建设局网站
  • 保亭交通工程建设局网站印刷 网站源码
  • 网站首页锚文本网站建设实训该写哪些内容
  • 做不锈钢的网站网站建设与管理课程设计
  • opencv学习记录1
  • kylin V10SP3安装mysql5.7.42
  • MATLAB 仿真无线传感器网络(WSN)三大经典场景
  • 9.05 DP 专题
  • 手机网站创建建站平台绑定域名
  • 怎么做网站海报ui网站界面设计模板
  • 软件接口设计文档陕西网络营销优化公司
  • 江苏SEO网站建设app制作教程步骤和方法