C中整数相等的更快技术

时间:2015-01-15 15:11:30

标签: c

我正在编写一个函数来检查两个整数是否相同。我用两种不同的方式写它。我想知道是否有任何性能差异

技术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;
}

2 个答案:

答案 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;
}