在include / linux / bitmap.h中,在bitmap_zero()中,为什么使用memset?
static inline void bitmap_zero(unsigned long *dst, int nbits) { if (small_const_nbits(nbits)) *dst = 0UL; else { int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); memset(dst, 0, len); } }
是*det = OUL
不够?
small_const_nbits
的定义是:
#define small_const_nbits(nbits) \ (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG)
BITS_PER_LONG
通常为32或64,具体取决于您所在的机器。
所以,如果你试图清除少于这么多的位数,你当然可以在一个操作中完成 – 这是if
语句的前半部分。 如果它长于32或64位,则需要设置多个单词,这是通过memset
调用完成的。