使用
是否有任何性能差异MyUserResponseMessage
与
a = a <= b ? a : b;
在我工作的代码中使用了第一个表单,但变量名很长,这使得它很难阅读。我宁愿使用第二种,但不确定是否存在任何性能差异。
答案 0 :(得分:9)
我用gcc -O2测试了它,两者都产生了完全相同的组件。没有任何区别。
答案 1 :(得分:7)
明确过早优化。
即使两个版本[*]之间存在性能差异,只有这一行是整体性能瓶颈的一部分才有意义:阅读Amdahl's Law。
[*]无论如何,不太可能出现明显的性能差异。如果您真的非常想知道,唯一可以找到的方法是构建一些有代表性的基准测试,使用工具链构建它们并在目标架构上运行它们。
答案 2 :(得分:2)
这是我的标准库实现(gcc5)的样子:
template<typename _Tp>
_GLIBCXX14_CONSTEXPR
inline const _Tp&
min(const _Tp& __a, const _Tp& __b)
{
// concept requirements
__glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
//return __b < __a ? __b : __a;
if (__b < __a)
return __b;
return __a;
}
因此,在内联此函数时,并且启用了所有优化后,std::min
的代码就会快得多。微优化通常不是程序的瓶颈。
答案 3 :(得分:1)
这是您需要进行一些性能分析的地方。但是,您可能没有发现任何区别,因为这两个语句可能会生成完全相同的代码(查看生成的汇编代码可以帮助 - 使用g++
,使用-S
进行编译)。
答案 4 :(得分:0)
在clang和gcc(启用了优化)中,它们生成相同的程序集:
cmp esi, edi
cmovle edi, esi
mov eax, edi