小编mih*_*g93的帖子

为什么 g++ -O3 不优化这个简单的按位运算

我有一个简单的函数,它是从许多最内部的循环中调用的。

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

c++ optimization gcc bit-manipulation x86-64

6
推荐指数
0
解决办法
146
查看次数

标签 统计

bit-manipulation ×1

c++ ×1

gcc ×1

optimization ×1

x86-64 ×1