我正在研究一個應用程序,我必須保持數據順序,每個數據單元都帶有一個序列號,其中我檢查序列號是否比前一個大1,如果是,我將收到的次數增加1.我的問題是,是否有差異:
1.將收到的次數增加一次。
AND
2.將最後收到的序號分配給收到的計數。作業與增量操作
謝謝。
我正在研究一個應用程序,我必須保持數據順序,每個數據單元都帶有一個序列號,其中我檢查序列號是否比前一個大1,如果是,我將收到的次數增加1.我的問題是,是否有差異:
1.將收到的次數增加一次。
AND
2.將最後收到的序號分配給收到的計數。作業與增量操作
謝謝。
這聽起來像是一個經典的過早優化問題。一般來說,增加值意味着「獲取原始 - >改變 - >存儲」,而分配將是「獲取其他 - >存儲新的」。 「其他」可能已被讀取,從而節省更多的時鐘週期。因此分配可能會更快。
但是增加1通常會被編譯器和CPU非常好地優化,所以它不需要任何讀取或存儲。它可以很好地在一個CPU命令中完成,從而消除了任何差異,實際上使得遞增1可能更好地選擇性能。
困惑?好。
要點是,這是你應該優化的那種不是要做的,除非你以瓶頸爲基準。然後你基準選項,並選擇最好的。
我明白了。謝謝! – keeda
如果我們開始討論一個多線程環境,這個答案可能會改變。具體來說,做一個直接的原子存儲比加載/添加/存儲可能不是防彈更好。 –
@keeda另一件事是測試它......它可能會花費你不到五分鐘來編寫一個簡單的基準。 –
'C#'\'java' \'javascript' \'C' \'Ruby' \'Assembly' \ ...? – gdoron
對不起,我正在與C. – keeda
工作肯定會有性能差異可以忽略不計。 – jedwards