0
我有一個函數參數預先知道時的性能比較?
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
的computatinal時間,是第一位的更慢,在發行版編譯好?
我有一個函數參數預先知道時的性能比較?
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
的computatinal時間,是第一位的更慢,在發行版編譯好?
問題的表現是不可能通過預測來回答的。這完全取決於編譯器能夠做出什麼樣的優化。
在這種情況下,做作:
#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
所以你建立與優化啓用?如果你向編譯器提示該函數可以使用'inline',是否有區別? 「constexpr」怎麼樣? 「慢」是什麼意思?你如何衡量?有什麼不同? –
如果參數在編譯時已知,那麼使用'constexpr'函數可能是個好主意。 –
你如何衡量表現和有什麼不同? f(p,MIN)包括p.first,所以自然需要更多時間。 –