1:简单描诉
a)内存依据不同的order 分成了不同大小的块,order_i 的块大小为k* 2^order_i,其实k为最小块,也就是order_0的块的大小。
b)分配内存的时候,去最小的能够满足你大小的order级别里找空闲块,比如order_i,找到了就分配,找不到去order_(i+1)里找,找到的话分解成两个order_i级别的内存块,其中一个分配出去,如果还是找不到继续向上找并进行分解。分解出来的两个空闲块是伙伴关系。
c)内存释放的时候,如果等大小的伙伴已经被释放了,就要和伙伴一起结合成一个更大的(下一级别的)块。
下面是我用一个二位数组作map实现的简单的伙伴算法,内核里的肯定更高级。改天研究以下。
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
const int mem_size= 256;
const char memory[mem_size]={0};
const int minimumSize= 4;
const int orderNum= 9;
vector< vector<int> > memoryMap;
int init_map()
{
int bloSize= 4;
while(bloSize<=mem_size)
{
vector<int> tmp;
for(int i=0; i<mem_size; i+=bloSize)
tmp.push_back(0);
memoryMap.push_back(tmp);