在 linux 内核中可以通过 DECLARE_BITMAP 宏来声明一个位图变量,其中 name 是位图变量的名称,bits 是申请的位的数量,在置位和读取的过程中,应该判断是否超出了这个数量。以下是内核中的实现代码:
#define DECLARE_BITMAP(name,bits) unsigned long name[BITS_TO_LONGS(bits)]
#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
#define BITS_PER_BYTE 8
#define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))