学习AA大神c++设计新思维笔记:04小内存分配
小内存分配
小型对象不能存在栈上?廉价而快速的动态分配
.在堆上.主要就是各种策略类
.
c堆分配器的简单包装.c通常分配(数百~数Kb).而c++默认管理为8个字节.如果是小对象,则很浪费.间接层(pimpl),则为堆
内存搜索匹配算法:最先,最佳,最差,随机
,回收是也要来次线性搜索
.主要探讨的就是根据小型对象
的专用分配器.其实就是加个限制条件
,来求最佳解.
构 块
{
空 初化(整 块大小,正 符 块);
空*分配(整 块大小);
空 回收(空*p,整 块大小);
空 发布();
极 有块(空*p,整 块长)常;
极 有可用(正 符 块数)常;
极 是填充()常;
正 符*mp数据;//
正 符 m第一可用块;
正 符 m可用块;//可用总块数,符<256
};//pod
四个层级.我不喜欢.我觉得三个层级最好.
最底层,能省则省.未定义构造,析构,赋值
函数.未设置块大小
,未被使用块
的第一个字节放下一个未被使用区块
的索引号.即先就在mp数据
里面记下下个位置
.
对(;i!=块;p+=块大小)
*p=++i;//每块上.加上索引
全靠这个.分配和归还区块时,常数时间
.分配只分配一个N字节(块大小,可大可小)
?,块不知道块大小
.
第2层:固定大小分配器.
就是一个向量<块>
,同样,分配与回收.回收时可用高速缓冲
.但对小对象,这一办法,好像没多大用.其实,我感觉,可以用一个大块如1M
来统一分配.不像它这样,一层层的.
小型对象可能:批量分配,顺序归还,逆序归还,偶尔归还(高速缓冲有用
.最好的方式还是根据需求,实现相应策略
.用户组装.析构函数定义为虚,则删 p
时能够正确的删.
第3层,第四层,都是包装.
当前有pmr
,好像很厉害.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现