mih*_*g93 6 c++ optimization gcc bit-manipulation x86-64
我有一个简单的函数,它是从许多最内部的循环中调用的。
uint16_t getBit(uint16_t val, uint16_t n)
{
return (val & (1 << n)) >> n;
}
Run Code Online (Sandbox Code Playgroud)
此版本的程序平均执行时间为 3.1 秒。
然后我想像这样重写该函数:
uint16_t getBit(uint16_t val, uint16_t n)
{
return (val >> n) & 1;
}
Run Code Online (Sandbox Code Playgroud)
该程序的第二个版本平均需要 2.9 秒来执行。
为什么 GCC 不将其优化为与 -O3 相同的东西?
编译器浏览器链接:https ://godbolt.org/z/s6fTfo4Ee