在C:
让我们说函数"Myfuny()"有50行代码,其中也可以调用其他较小的函数.以下哪一个代码更有效?
void myfunction(long *a, long *b);
int i;
for(i=0;i<8;i++)
myfunction(&a, &b);
Run Code Online (Sandbox Code Playgroud)
要么
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
myfunction(&a, &b);
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
kri*_*iss 14
那是不成熟的优化,你应该不在乎......
现在,从代码维护的角度来看,第一种形式(带循环)肯定更好.
从运行时的角度来看,如果函数是内联的并且在同一个编译单元中定义,并且编译器没有展开循环本身,并且代码已经在指令缓存中(我不知道月亮阶段,我仍然相信它不应该有任何显着的影响)第二个可能是最快的.
正如你所看到的,它有很多条件可以让它变得最快,所以你不应该这样做.在您的程序中可能还有许多其他要优化的参数,这些参数对代码速度的影响要大于此.这将影响算法程序的复杂性的任何变化都会有很大的影响更大.更一般地说,任何不影响算法复杂性的代码更改都可能是过早优化.
如果你真的想确定,请测量.在x86上,您可以使用我在此问题中使用的那种技巧来获得相当准确的度量.诀窍是读取计算所花费周期数的处理器寄存器.这个问题还说明了代码优化问题如何变得棘手,即使对于非常简单的问题也是如此.
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |