bitmap用于实现bool的数组,标识一个事件发生没发生。可以理解为bitmap处理的是有没有的问题。bitmap将一片连续的空间作为一个数据类型,其中的成员都是1位,长度是bitmap的容量。
声明一个 bitmap
DECLARE_BITMAP 宏
#define DECLARE_BITMAP(name,bits) \
unsigned long name[BITS_TO_LONGS(bits)]
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define BITS_PER_BYTE 8
根据上边的定义,可以解析成
- 在32位系统下:DECLARE_BITMAP(name, bits) == unsigned long name[(bits+31)/32]
- 在64位系统下:DECLARE_BITMAP(name, bits) == unsigned long name[(bits+63)/64]
声明一个保存数据类型是 unsigned long 类型的结构体,整个的数组成员,我们看做是保存了 bits 个位的容器。
参数:
- name,保存位的 unsigned long 类型的数据保存在内存中的首地址,或者是bitmap的首地址
- bits,我们要用到多少位,或者是bitmap中元素个数
假设我们要一个能存储32个bit的bitmap,我们只需要定义一个含一个 unsigned long 类型的数组就可以,即unsigned long

最低0.47元/天 解锁文章
1156

被折叠的 条评论
为什么被折叠?



