use*_*112 1 c c++ optimization performance bit-manipulation
我可以替换以下IF语句:
if(condition){
x += y;
}
Run Code Online (Sandbox Code Playgroud)
有:
x = x + ((y - x) * (condition));
Run Code Online (Sandbox Code Playgroud)
删除分支.
有没有办法避免上面的乘法,并用一个按位操作替换它,使其更快?
Seb*_*ach 10
如果不按预期用途测量应用程序,请不要这样做.
现代编译器已经可以检测并将这些模式转换为条件移动.
现代CPU推测性地"在时间之前"运行代码,这可能比复杂的位表达式更快; 此外,还有一个分支目标缓冲区,可以记住本地环路中的决策,然后根据BTB提前推测运行代码.
如上所述:如果不按预期用途衡量您的应用程序,请不要这样做.不要对任意基准测试,这会在大多数情况下产生误导(并因此代价高昂)的结果.当然,更喜欢算法和体系结构优化而不是这种微观设计; 保持代码可维护性从长远来看通常更便宜; 不要在未定义的行为和高度专业化的代码上构建您的业务:

你的C或C++向导是否足以验证"优化"的正确性?您是否考虑过无符号溢出和未定义的行为?提示促销?
我认为答案是否定的,因为你寻求帮助,但没有意识到你的例子中使用的类型是至关重要的,但未提及.