尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Alexandresku设计的loki小对象内存分配器
📅 发布时间:2026/6/19 19:28:10

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

相关新闻

  • java预习
  • B/S体系结构风格
  • Feign动态URL配置

最新新闻

  • FanControl V270终极指南:Windows风扇智能控制与精准优化的完整解决方案
  • Mohist 1.20.1:解决Minecraft服务器Mod与插件兼容性问题的混合架构方案
  • DeepSeek-V4定价真相:显存、框架与提示词如何决定真实成本
  • C语言数学函数库工程实践:从ceil到expm1的精度与性能优化
  • PlantAssistant-管道IDF文件
  • 5分钟解锁B站经典界面:Bilibili-Old项目全面解析

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号