2016-09-21 4 views
0

У меня есть функциясравнение производительности, когда аргументы предварительно известны?

enum Limit {MIN, MAX}; 

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

Сравните computatinal время f(p, MIN) и p.first, является первым один медленнее, даже с хорошим компилятором версии?

+2

Так вы строите с оптимизацией включен? Есть ли разница, если вы намекаете на компилятор, что функция может быть выполнена 'inline'? Как насчет 'constexpr'? И что вы подразумеваете под «медленными»? Как вы измерили? Какая разница? –

+1

Если аргументы известны во время компиляции, то создание функции 'constexpr' может быть хорошей идеей. –

+0

Как вы оцениваете производительность и в чем разница? f (p, MIN) включает p.first, поэтому, естественно, требуется больше времени. –

ответ

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 
Смежные вопросы