参数预先知道时的性能比较?

时间:2016-09-21 17:38:53

标签: c++ performance

我有一个功能

enum Limit {MIN, MAX};

inline int f(pair<int, int> p, Limit l)
{
    return l == MIN ? p.first : p.second;
}

比较f(p, MIN)p.first的计算时间,即使在发布版本中使用了一个好的编译器,第一个会慢吗?

1 个答案:

答案 0 :(得分:1)

通过预测无法回答绩效问题。它完全取决于编译器能够进行的优化。

在这个人为的案例中:

#include <utility>

enum Limit {MIN, MAX};

inline int f(std::pair<int, int> p, Limit l)
{
    return l == MIN ? p.first : p.second;
}

extern void emit(int);
int main()
{
  auto p = std::make_pair(4, 5);
  emit(f(p, MIN));
  emit(p.first);
}

没有任何区别:

main:                                   # @main
        pushq   %rax

        movl    $4, %edi
        callq   emit(int)

        movl    $4, %edi
        callq   emit(int)

        xorl    %eax, %eax
        popq    %rcx
        retq