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

performance comparison when arguments are pre-known?

本文关键字:性能 性能比 比较 先知 参数      更新时间:2023-10-16

我有一个函数

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的计算时间,即使在发行版中有一个好的编译器,第一个是否更慢?

性能问题是不可能通过预测来回答的。这完全取决于编译器能做哪些优化。

在这种人为的情况下:

#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