0
ffsl
function是glibc的一部分。在海湾合作委员会它也可以通过__builtin_ffsl
。它返回long中最低有效位的索引。在C++中调用`ffsl`的标准方法?
有没有一种方法可以在符合标准的C++代码中访问这个功能?我想获得这些版本(如果可用),因为它们是用汇编语言编写的以获得高性能。 (大多数体系结构都提供了这个功能或类似的指令。)
ffsl
function是glibc的一部分。在海湾合作委员会它也可以通过__builtin_ffsl
。它返回long中最低有效位的索引。在C++中调用`ffsl`的标准方法?
有没有一种方法可以在符合标准的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内在函数并不总是很好的优化)。
这不符合标准。你怎么能在一个标准的符合代码中访问它? – skypjack
做法[建议](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3864.html) – harold
@skypjack我希望有一个功能可以做同样的事情存在于标准头文件的某个地方,根据架构或操作系统的不同,其实现可能是“正确的事情”。 –