在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
还不够吗?
答案 0 :(得分:3)
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
调用完成的。