在使用 <script> 标签时,是否存在性能差异?
a = a <= b ? a : b;
对比
a = std::min(a, b);
我正在处理的代码中使用了第一种形式,但变量名很长,这使得代码难以阅读。我更喜欢使用第二种形式,但不确定是否会有性能差异。
我使用gcc -O2对其进行了测试,两者生成的汇编代码完全相同,没有任何区别。
优先关注代码的清晰度而非过早的优化。
即使两个版本之间存在性能差异[*],只有当这行代码是整个性能瓶颈的一部分时才会有影响: 请阅读 阿姆达尔定律。
[*] 实际上,这种性能差异可能并不会对性能造成明显的影响。如果你真的非常想知道,唯一找出确切答案的方法是构建一些代表性的基准测试,并使用您的工具链构建它们,在目标架构上运行。
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
的代码速度将达到最快。微观优化通常不是程序的瓶颈。g++
,请使用-S
进行编译)。 cmp esi, edi
cmovle edi, esi
mov eax, edi
const int& x = min(n+1, n-1);
,你最终会得到一个悬空引用。 - vsoftcox
的生命周期吗? - Tristan Brindle