【问题标题】:In bitmap.h, why does bitmap_zero need memset?在 bitmap.h 中,为什么 bitmap_zero 需要 memset?
【发布时间】:2013-04-13 04:09:15
【问题描述】:

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

【问题讨论】:

    标签: linux bitmap linux-kernel memset


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2020-05-03
      • 2014-08-31
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2013-06-12
      • 2012-11-21
      • 2011-04-13
      相关资源
      最近更新 更多