更快的条件检查

时间:2014-08-28 13:09:24

标签: c performance microcontroller computer-architecture

以下代码片段执行相同的逻辑(x仅为0或1)。 哪个代码执行得更快?

第一个代码:

if (x == 1)
{
   y = 10;
}

第二代码:

if (x != 0)
{
   y = 10;
}

第三代码:

if (x)
{
   y = 10;
}

2 个答案:

答案 0 :(得分:2)

这取决于架构。在许多8位微控制器上,与零相比,需要一条指令,而与零以外的特定数字相比则需要两条指令。

第一个代码将转换为:

LDAA  x
CMPA  #1
BNE   loc
...

这会将x加载到寄存器中,将寄存器与1进行比较,然后跳转到相等位置​​。

第二个代码将转换为:

LDAA  x
BNE   loc

x加载到寄存器中会设置零标志,因此可以立即将相等跳转到零。这样可以节省两个字节的代码存储空间和两个CPU周期。

您可以通过将小样本编译到汇编或通过反汇编实际代码来检查您的平台上是否发生了这种情况。

答案 1 :(得分:1)

您可能想要测量它,但很可能那两个速度完全相同(在机器代码级别上它们非常相似)。