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_ffsffs(3)可能会生成非等效代码(我将使用编译器固有函数,因为它们往往会被编译器更好地优化,另一方面,GCC固有函数并非总是得到最佳优化)。

关于c++ - 在C++中调用 `ffsl`的标准方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41369765/

10-14 07:12