ffsl
function是glibc的一部分。在GCC中,也可以通过 __builtin_ffsl
使用。它返回long中最低有效位的索引。
有没有办法在符合标准的C++代码中访问此功能?我希望获得这些版本(如果有),因为它们是为提高性能而使用汇编语言编写的。 (大多数体系结构都提供了有关此功能或类似功能的说明。)
最佳答案
没有标准功能可以实现这一点,并且每个编译器通常都提供其自己的内在函数来计算ffs(请参阅Wikipedia以获取相对完整的列表)。所以你最好的办法是做一个包装
#ifdef __GNUC__
# define ffs(x) __builtin_ffs(x)
#elif __INTEL_COMPILER
# define ffs(x) _bit_scan_forward(x)
...
另请注意,
__builtin_ffs
和ffs(3)
可能会生成非等效代码(我将使用编译器固有函数,因为它们往往会被编译器更好地优化,另一方面,GCC固有函数并非总是得到最佳优化)。关于c++ - 在C++中调用 `ffsl`的标准方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41369765/