C++ 内存管理 之 Loki Allocator
Loki Allocator 有三个类 这玩意对比起 pool allocator 的优点就在于 它有把内存还给系统
但是它作为一个 内存分配器 却在里面使用了 vector 作为容器… 按道理来说 应该在其内部实现一个简易版的 vector 才不会那么奇怪 但也没所谓 只是 先用了一次标准库的分配器 后续使用容器的时候 就可以用 Loki 分配器了.
- Chunk
- FixedAllocator
- SmallObjAllocator
Chunk 解剖
Chunk 是整个分配器的最底层 里面主要是三个 成员变量
1 | // 指向内存块 |
Chunk 的几个关键函数 已进行 剪裁 和 修改
Chunk 分配
分配流程很简单 就是 申请了内存以后 将每个小区块的第一个字节设置为索引 排好号
取的流程:
- 从 当前可用区块的第一块索引中取 得当前可用区块
- 当前可用区块会被返回
- 被返回的可用区块中的索引 被设置到 当前可用区块索引去(这样下一次就会使用到它)
- 可用区块数目 - 1