1,概念介绍
用途就是为了管理内存页,一比特对应一页,即bit对应4KB。因为管理内存的位图本身也需要空间。所以我们要尽量压缩管理代价。
一个简单的运算:1K的位图可以管理多大的内存空间呢?
1Kb x 8bit x 4KB = 32Mb。所以1k的位图可以管理32M的内存空间。
2,数据结构
struct bitmap {
uint32_t btmp_bytes_len;//所占用的空间长度,单位:字节
uint8_t* bits;
};
3,操作及实现思路
void bitmap_init(struct bitmap* btmp);
bool bitmap_scan_test(struct bitmap* btmp, uint32_t bit_idx);
int bitmap_scan(struct bitmap* btmp, uint32_t cnt);
void bitmap_set(struct bitmap* btmp, uint32_t bit_idx, int8_t value);
1,位图初始化
2,判断某个位是否为1,若为1则返回true,否则返回false
3,在位图中申请连续个cnt个位,成功就返回起始位下标,失败返回-1
4,将位图bit_idx位设置为value