在bitmap.h中,为什么bitmap_zero需要memset?

在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调用完成的。