我在C/C++中有包含许多分支的代码序列,如下所示:
if( condition1 )
return true;
if( condition2 )
return true;
...
return false;
Run Code Online (Sandbox Code Playgroud)
(相当于返回condition1 || condition2 || ...;)
评估每个条件需要几次存储器访问(所有只读),但编译器在评估先前条件之前不移动存储器访问而错过了一个重要的优化机会.当condition1为真时,condition2的内存访问的原因可能是段错误.我知道他们不这样做,我希望编译器能够做出明智的事情并将这些代码序列中的一些混合在一起,以适应性能,例如利用指令级并行性.我也不想将条件更改为逻辑或(不是短路),因为其中一个分支可能会跳出来.
关于如何实现这一点的任何想法(最好使用gcc)?
谢谢.