小内存分配
小型对象不能存在栈上?廉价而快速的动态分配
.在堆上.主要就是各种策略类
.
c堆分配器的简单包装.c通常分配(数百~数Kb).而c++默认管理为8个字节.如果是小对象,则很浪费.间接层(pimpl),则为堆
内存搜索匹配算法:最先,最佳,最差,随机
,回收是也要来次线性搜索
.主要探讨的就是根据小型对象
的专用分配器.其实就是加个限制条件
,来求最佳解.
构 块
{
空 初化(整 块大小,正 符 块);
空*分配(整 块大小);
空 回收(空*p,整 块大小);
空 发布();
极 有块(空*p,整 块长)常;
极 有可用(正 符 块数)常;
极 是填充()常;
正 符*mp数据;//
正 符 m第一可用块;
正 符 m可用块;//可用总块数,符<256
};//pod
四个层级.我不喜欢.我觉得三个层级最好.
最底层,能省则省.未定义构造,析构,赋值
函数.未设置块大小
,未被使用块
的第一个字节放下一个未被使用区块
的索引号.即先就在mp数据
里面记下下个位置
.
对(;i!=块;p+=块大小)
*p=++i;//每块上.加上索引
全靠这个.分配和归还区块时,常数时间
.分配只分配一个N字节(块大小,可大可小)
?,块不知道块大小
.
第2层:固定大小分配器.
就是一个向量<块>
,同样,分配与回收.回收时可用高速缓冲
.但对小对象,这一办法,好像没多大用.其实,我感觉,可以用一个大块如1M
来统一分配.不像它这样,一层层的.
小型对象可能:批量分配,顺序归还,逆序归还,偶尔归还(高速缓冲有用
.最好的方式还是根据需求,实现相应策略
.用户组装.析构函数定义为虚,则删 p
时能够正确的删.
第3层,第四层,都是包装.
当前有pmr
,好像很厉害.