在C中:

可以说函数“Myfuny()”有50行代码,在其中也可以调用其他较小的函数。以下哪个代码效率更高?

void myfunction(long *a, long *b);
int i;
for(i=0;i<8;i++)
   myfunction(&a, &b);

要么
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);

任何帮助,将不胜感激。

最佳答案

那是过早的优化,您根本不在乎...

现在,从代码维护的角度来看,第一种形式(带有循环)肯定更好。

从运行时的角度来看,如果函数是内联的并且在同一编译单元中定义,并且使用的编译器不会展开循环本身,并且代码是否已在指令高速缓存中(我不知道月亮阶段,我仍然认为它不会产生任何明显的影响)第二阶段可能略快。

如您所见,有很多条件可以使其达到最快,因此您不应该这样做。在您的程序中可能还有许多其他参数需要优化,这些参数对代码速度的影响远大于此参数。任何会影响程序算法复杂度的更改都会产生更大的影响。一般而言,任何不影响算法复杂度的代码更改都可能是过早的优化。

如果您确实希望确定,请测量。在x86上,您可以使用this question中使用的技巧来获得相当准确的度量。诀窍是读取一个处理器寄存器,该寄存器计算所花费的周期数。该问题还说明了即使对于非常简单的问题,代码优化问题也会变得棘手。

关于c - 以下哪项将更有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3885480/

10-12 16:33