3

在 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不够吗?

4

1 回答 1

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

于 2013-04-13T04:16:37.747 回答