我正在编写一个函数来检查两个整数是否相同。我用两种不同的方式写它。我想知道是否有任何性能差异
技术1
int checkEqual(int a ,int b)
{
if (a == b)
return 1; //it means they were equal
else
return 0;
}
技术2
int checkEqual(int a ,int b)
{
if (!(a - b))
return 1; //it means they are equal
else
return 0;
}
答案 0 :(得分:6)
简而言之,没有性能差异。
我使用带有-O2 -S
选项的gcc-4.8.2编译了每种技术(-S
生成汇编代码)
技术1
checkEqual1:
.LFB24:
.cfi_startproc
xorl %eax, %eax
cmpl %esi, %edi
sete %al
ret
技术2
checkEqual2:
.LFB25:
.cfi_startproc
xorl %eax, %eax
cmpl %esi, %edi
sete %al
ret
这些是完全相同的汇编代码。 所以这两个代码将提供相同的性能。
<强>附录强>
bool checkEquals3(int a, int b) { return a == b; }
提供
checkEqual3:
.LFB26:
.cfi_startproc
xorl %eax, %eax
cmpl %esi, %edi
sete %al
ret
完全相同的汇编代码!
答案 1 :(得分:3)
在没有特定系统的情况下讨论手动代码优化没有任何意义。
话虽如此,您应该始终将这些优化留给编译器,并专注于尽可能地编写可读代码。
只使用一个return语句可以使代码更具可读性。另外,缩进代码。
int checkEqual (int a, int b)
{
return a == b;
}