2016-12-28 166 views
0

ffsl function是glibc的一部分。在海湾合作委员会它也可以通过__builtin_ffsl。它返回long中最低有效位的索引。在C++中调用`ffsl`的标准方法?

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

+1

这不符合标准。你怎么能在一个标准的符合代码中访问它? – skypjack

+1

做法[建议](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3864.html) – harold

+0

@skypjack我希望有一个功能可以做同样的事情存在于标准头文件的某个地方,根据架构或操作系统的不同,其实现可能是“正确的事情”。 –

回答

1

没有标准的函数来实现这个功能,每个编译器通常提供它自己的固有的计算ffs(例如参见Wikipedia,查看相对完整的列表)。所以,你最好拿是做一个包装

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

还要注意的是__builtin_ffsffs(3)可能产生非等效代码(我会使用编译器的内部,因为这些往往是由编译器更好地优化,而另一方面GCC内在函数并不总是很好的优化)。