【问题标题】:If Statement Comparison Overhead vs Assignment OverheadIf 语句比较开销与分配开销
【发布时间】:2014-02-07 14:10:40
【问题描述】:

我正在研究一些代码,发现了这个 (here):

void ass_set_margins(ASS_Renderer *priv, int t, int b, int l, int r)
{
    if (priv->settings.left_margin != l || priv->settings.right_margin != r ||
        priv->settings.top_margin != t || priv->settings.bottom_margin != b) {
        priv->settings.left_margin = l;
        priv->settings.right_margin = r;
        priv->settings.top_margin = t;
        priv->settings.bottom_margin = b;
        ass_reconfigure(priv);
    }
}

我想知道为什么需要首先检查值,以便如果其中一个与传递的参数不同,那么我们用传递的参数分配所有值?如果我们不检查就全部通过了怎么办?更少的代码,更少的开销?

改变状态的开销不仅仅是检查它吗?

【问题讨论】:

    标签: c if-statement comparison variable-assignment overhead


    【解决方案1】:

    不仅仅是分配:

    ass_reconfigure(priv);
    

    所以无论如何都必须检查条件。

    如果您无论如何都必须执行分支,为什么不将仅在相同条件下才需要的分配也移到那里呢?这当然会节省一些行代码,也可能会节省一两条已执行的指令。

    【讨论】:

    • 哦,我就像一个盲人没有注意到它。谢谢!
    猜你喜欢
    • 2010-12-12
    • 2010-11-20
    • 1970-01-01
    • 2013-07-25
    • 2010-10-29
    • 2011-11-20
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多