内存管理算法
1. 伙伴算法以页(4k)为单位管理内存,解决的是外部内存碎片问题。
2. slab算法是为了解决小块内存申请的问题,是对伙伴算法的一种补充。
1 伙伴(Buddy)算法
- 参考
- 浅析Buddy算法
- 解析:在 Buddy 算法中,以页为单位管理内存,把内存按照 2 的幂次方分组,每一组内内存以链表方式连接,每一个链节点由 2 的幂次方个连续页组成。比如,第 0 组,由 1 个页作为链表节点;第 1 组,由 2 个页作为链表节点;第 2 组,由 4 个页作为链表节点;第 10 组,由 1024 个页作为链表节点。
- 功能:提高内存利用率的同时减少外部内存碎片
- 伙伴定义:
- 两个块具有相同大小
- 物理地址是连续的;
- 伙伴算法原理:
- 申请内存过程:当请求一个一个页(4k)大小的内存时,先向组 0 请求;如果满足,直接分配;如果组 0 无法分配,就向上一层组 1 请求;如果组 1 满足,返回分配的内存给调用者,且将剩下的一半放入组 0 的链表中。
- 释放内存过程:释放时先检查所在链表中该位置是否有他的伙伴;如果不存在,则直接释放的块插入链表头。如果他所在链表中有伙伴存在,则将其从链表摘下,合并成一个大块,然后继续向后查找合并后的块在更大一级链表中是否有伙伴的存在,直至不能合并或者已经合并至最大块 2^10 为止

2 slab