学习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,好像很厉害.

posted @   zjh6  阅读(12)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示