目录
成竹在胸
1 上中下三个classes分析
Loki Library:
- Loki Library是一个在业界很前沿的库,但是不成熟,作者对这个库的维护只到0.1.7版本。
- 之前讲过GNU C的编译器不会将内存归还给OS,在多进程的时候会有影响。但是loki会将内存进行归还。
Loki allocatror::三个class结构,从下往上就是从底层到上层。
三个class,从下往上就是从底层到上层。
2 loki allocator行为图解
2.1 loki allocator
2.2 Chunk
Chunk::Init()
Chunk::Allocate()
- 数组代替链表,索引代替指针。
Chunk::Deallocate()
3 class FixedAllocator分析
FixedAllocator::Allocate()
- 其中#line 20中的allocChunk = &*i;,*i得到Chunk,&*i得到了Chunk的首地址;
- 此处的分配动作中之所以有deallocChunk = &chunks_.front()是因为往vector中添加新的Chunk的时候可能会出现数据的移动,如果出现了数据移动,那之前的iterator就会失效,所以对这些值进行重新设定。
- 逻辑整理:假设现在有1w个Chunk,有人来申请,先找出被标识的区块,否则从头找起哪个Chunk有区块,否则创建新的Chunk。
FixedAllocator::VicinityFind()
- VicinityFind():临近查找。夹杀法找到地址。
FixedAllocator::DoDeallocate()
4 Loki_allocator总结
Loki allocator检讨:
- loki 中使用了 vector,而 vector 使用的是标准库的分配器,容器使用 loki 的时候已经和标准库的分配器脱离了关系,所以不存在鸡生蛋和蛋生鸡的问题。所以当你使用loki的时候,其实已经涉及到了标准库的分配器和容器以及loki。
- 可以自己实现 vector,替代loki中的vector,那么就不会有上面这种问题了。