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そのため、その数よりも少ないビットをクリアしようとしている場合は、1 回の操作で確実に実行できます。これがステートメントの前半です。32 ビットまたは 64 ビットよりも長い場合は、複数のワードを設定する必要があり、それはmemset呼び出しによって行われます。

于 2013-04-13T04:16:37.747 に答える