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

时间:2013-04-13 04:09:16

标签: linux bitmap linux-kernel 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还不够吗?

1 个答案:

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