If 语句比较开销与分配开销

Posted

技术标签:

【中文标题】If 语句比较开销与分配开销【英文标题】:If Statement Comparison Overhead vs Assignment Overhead 【发布时间】: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);
    

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

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

【问题讨论】:

【参考方案1】:

不仅仅是分配:

ass_reconfigure(priv);

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

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

【讨论】:

哦,我就像一个盲人没有注意到它。谢谢!

以上是关于If 语句比较开销与分配开销的主要内容,如果未能解决你的问题,请参考以下文章

PHP - try/catch 是不是比 if/then 有更高的开销?

C 中 switch 语句的开销

Java异常知识整理_处理异常时的性能开销

mysql UPDATE 语句 - 相同值的开销?

包含固定数组的托管不安全结构上的 C# 固定语句的开销是多少?

sqlserver中这样的字段用啥索引比较好?