执行哪一个更快?

时间:2013-05-29 06:29:11

标签: c++ performance qt

int value = 0;
foreach (QString string, stringlist)
  if(value < this->returnMaximum(Timer.value(string)->Ok->elapsed(),
                                 Timer.value(string)->Nok->elapsed(),
                                 Timer.value(string)->Err->elapsed()))
     value = this->returnMaximum(Timer.value(string)->Ok->elapsed(),
                                 Timer.value(string)->Nok->elapsed(),
                                 Timer.value(string)->Err->elapsed());

int value = 0;
foreach (QString string, stringlist)
{
  int max = this->returnMaximum(Timer.value(string)->Ok->elapsed(),
                                Timer.value(string)->Nok->elapsed(),
                                Timer.value(string)->Err->elapsed()));
  if(value < max)
     value = max;
}

inline int returnMaximum(int _a, int _b, int _c)
{
int max = _a;
(max < _b) && (max = _b);
(max < _c) && (max = _c);
return max;
}

显然在第二个中你减少了一个函数调用,但我想知道一个函数调用是否会花费我很多,因为坦率地说我喜欢第一个函数调用。

4 个答案:

答案 0 :(得分:3)

如果编译器是天真的,第一个解决方案要求你调用大约7个其他函数(可能自己调用​​函数)。除此之外,函数参数中还有6个其他间接参数。但实际上,它在很大程度上取决于功能。编译器可能会改善你的情况。

然而,对于所有问题,这个问题要快得多,您应该对特定代码进行测量。如果您不经常使用此代码段,则无需对其进行大量优化。

除此之外,我会问自己第一个或第二个代码片段是否更具可读性。在可读性方面,我会选择第二个解决方案。

答案 1 :(得分:0)

第二次通话更便宜。在第一个示例中,您在此函数中还有一个函数调用+计算。所以在这种情况下,你需要做两次工作。

答案 2 :(得分:0)

如果你肆无忌惮地进行基准测试,请参阅。

根据经验,如果在优化后它们没有达到相同的效果,那么你可以期望第二个表现更好。如果returnMaximum函数没有内联,这可能会阻止优化器确定是否真的需要第二个函数调用。

答案 3 :(得分:0)

第一个应该稍快一些。但差异可能只在一个非常基本的编译器上。优化之后两者在现代编译器中实际上可能最终相同。为了获得准确的结