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

标签 c++ c++11 gcc glibc

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/

相关文章:

c++ - 在 vs2008 中升级后检测到堆损坏

c++ - 如何在 Windows 上更新已安装库的位置?

c++ - 没有使用模板功能从 `int` 到 `float` 的自动转换

c++ - 是什么导致移动构造函数被删除

c - 为什么 malloc 将 gcc 中的值初始化为 0?

c++ - Eclipse/Code::Block 不运行应用程序

c# - Windows 钩子(Hook)的奇怪行为

c++ - shared_ptr 无法解析

gcc - 如何谷歌搜索--depend?

c++ - 编译器推导超出范围的变量的右值引用