在 C++ 中调用 `ffsl` 的标准方法?

Standard way to call `ffsl` in C++?

ffsl function is part of glibc. In GCC it is also available via __builtin_ffsl。它 returns long 中最低有效位的索引。

有没有办法在符合标准的 C++ 代码中访问此功能?我想获得这些版本(如果可用),因为它们是用汇编语言编写的,以实现高性能。 (大多数体系结构都提供了此功能或类似功能的说明。)

没有标准函数可以实现这一点,每个编译器通常都提供自己的内在函数来计算 ffs(参见 Wikipedia 以获取相对完整的列表)。所以你最好的办法是做一个包装器

#ifdef __GNUC__
#  define ffs(x) __builtin_ffs(x)
#elif __INTEL_COMPILER
#  define ffs(x) _bit_scan_forward(x)
...

另请注意,__builtin_ffsffs(3) 可能会生成不等效的代码(我会使用编译器内部函数,因为它们往往会被编译器更好地优化,另一方面 GCC 内部函数不是总是优化得很好)。