4. 第四讲 loki::allocator

目录

1 上中下三个classes分析

2 loki allocator行为图解

2.1 loki allocator

2.2 Chunk

Chunk::Init()

Chunk::Allocate()

Chunk::Deallocate()

3 class FixedAllocator分析

4 Loki_allocator总结










成竹在胸

1 上中下三个classes分析

Loki Library:

image-20211208161947132

  • Loki Library是一个在业界很前沿的库,但是不成熟,作者对这个库的维护只到0.1.7版本。
  • 之前讲过GNU C的编译器不会将内存归还给OS,在多进程的时候会有影响。但是loki会将内存进行归还

Loki  allocatror::三个class结构,从下往上就是从底层到上层。

image-20211208162000111

三个class,从下往上就是从底层到上层。

2 loki allocator行为图解

2.1 loki allocator

image-20211208162011380

 image-20211208162022485

 image-20211208162031365

image-20211208162045656

image-20211208162055418

 image-20211208162108361

 image-20211208162120097

2.2 Chunk

Chunk::Init()

loki allocator,Chunk

Chunk::Allocate()

Chunk::Allocate()

  • 数组代替链表,索引代替指针。

Chunk::Deallocate()

image-20211208162154856
 

3 class FixedAllocator分析

FixedAllocator::Allocate()

 image-20211208162205575

  • 其中#line 20中的allocChunk = &*i;,*i得到Chunk,&*i得到了Chunk的首地址;
  • 此处的分配动作中之所以有deallocChunk = &chunks_.front()是因为往vector中添加新的Chunk的时候可能会出现数据的移动,如果出现了数据移动,那之前的iterator就会失效,所以对这些值进行重新设定。
  • 逻辑整理:假设现在有1w个Chunk,有人来申请,先找出被标识的区块,否则从头找起哪个Chunk有区块,否则创建新的Chunk。

FixedAllocator::VicinityFind()

image-20211208162223294

  • VicinityFind():临近查找。夹杀法找到地址。

FixedAllocator::DoDeallocate()

image-20211208162233529
 

4 Loki_allocator总结

Loki allocator检讨:

 image-20211208162243742

  • loki 中使用了 vector,而 vector 使用的是标准库的分配器,容器使用 loki 的时候已经和标准库的分配器脱离了关系,所以不存在鸡生蛋和蛋生鸡的问题。所以当你使用loki的时候,其实已经涉及到了标准库的分配器和容器以及loki。
  • 可以自己实现 vector,替代loki中的vector,那么就不会有上面这种问题了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值