[英]How do the likely/unlikely macros in the Linux kernel work and what is their benefit?
[英]What is the purpose of hweight macros in the linux kernel?
在阅读内核中的一些驱动程序代码时,我遇到了hweight8
/ hweight16
/ hweight32
/... 宏。 我想了解这些宏的用途以及它们的作用,但不幸的是,我找不到有关该主题的任何文档。
宏的定义如下所示,可以在
包括/asm-generic/bitops/const_hweight.h
#define hweight8(w) (__builtin_constant_p(w) ? __const_hweight8(w) : __arch_hweight8(w))
#define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w))
#define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w))
#define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
好的,找到答案了!
hweight 函数似乎用于计算字节/字中等于 1 的位数。 我不完全理解这个用例,但我在 Linux NAND 驱动程序中找到了这段代码,使用它来检查一个块是否被擦除(所有位都是 1),同时接受一些要翻转的位。
示例调用:
hweight8(1) --> 1
hweight8(2) --> 1
hweight8(3) --> 2
hweight8(4) --> 1
hweight8(5) --> 2
hweight8(6) --> 2
hweight8(7) --> 3
hweight8(8) --> 1
and so on...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.