在 C++ 中调用 `ffsl` 的标准方法?
Standard way to call `ffsl` in C++?
ffsl
function is part of glibc. In GCC it is also available via __builtin_ffsl
。它 returns 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 内部函数不是总是优化得很好)。
ffsl
function is part of glibc. In GCC it is also available via __builtin_ffsl
。它 returns 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 内部函数不是总是优化得很好)。