我有一些涉及多个操作的方程式,我希望尽快运行。由于c ++编译器将其分解为机器代码,无论如何,如果我将其分解为多行(如
)都很重要A=4*B+4*C;
D=3*E/F;
G=A*D;
VS
G=12*E*(B+C)/F;
我的需求比这更复杂,但我认为它传达了这个想法。此外,如果这是一个被调用的函数是在一个循环中,定义双A,D是否花费CPU时间与将其作为类变量放入?
答案 0 :(得分:1)
使用现代编译器,Clang / Gcc / VC ++ / Intel,它并不重要,您应该做的最好的事情是担心代码的可读性并启用优化,编译器设计人员非常清楚问题像这些并设计他们的编译器(在大多数情况下)优化根据。
如果我要说哪个会慢一些我会假设第一种方式,因为会有3个mov指令,我可能是错的。但这不是你应该担心的事情。
答案 1 :(得分:0)
如果这些变量是整数,则第二个代码片段不是第一个的有效优化。对于B=1
,C=1
,E=1
,F=6
,您有:
A=4*B+4*C; // 8
D=3*E/F; // 0
G=A*D; // 0
和
G=12*E*(B+C)/F; // 4
如果浮点,那么它真的取决于什么编译器,什么编译器选项,以及你有什么CPU。