2014-01-18 38 views
0

我正在研究一些代碼,發現這個(here):如果語句比較架空VS分配開銷

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); 
    } 
} 

我很奇怪,爲什麼是需要首先檢查值,這樣,如果其中一個是不同的從傳遞的參數,然後我們分配所有的值與傳遞的參數?如果我們不經過檢查就通過了他們呢?代碼少,開銷少?

更改狀態的開銷不僅僅是檢查它嗎?

回答

3

有不僅僅是分配更多:

ass_reconfigure(priv); 

所以條件將不得不反正檢查。

而且,如果您必須執行分支,爲什麼不移動僅在那裏的相同條件下必需的分配呢?這當然會保存一些行代碼,並且可能還會保存一到兩條執行的指令。

+0

哦,我就像一個盲人不知道它。謝謝! –