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 有更高的开销?