条件分支与条件传送问题

2019-10-27  本文已影响0人  ProgrammingGuy
// return absdiff;
int ct(int x, int y)
{
    int lval = x - y;
    int rval = y - x;
    if (x > y)
    {
        rval = lval;
    }
    return rval;
}

int cb(int x, int y)
{
    if (x > y)
    {
        goto t;
    }
    goto d;
t:
    return x - y;
d:
    return y - x;
}

long cread(long* xp)
{
    return (xp ? *xp : 0);
}

ct为条件传送示例,cb为条件分支示例。条件传送是先计算出该返回的两个值,然后根据条件来返回其中一个,因为有流水线的优势,所以这个方法在现代计算机中可以获得性能优势。条件分支为传统方式,根据测试条件来执行跳转,性能相对弱,特别是预测分支失败之后,需要很多时钟周期回到正确的分支。
cread示例说明了条件传送不适用的地方,如果xp是空指针,在条件传送流程中会对空指针取值,就引发了空指针引用问题。

上一篇下一篇

猜你喜欢

热点阅读