2015-09-07 72 views
-11
int a=1,b=2; 
int c=29464,d=347653; 

有兩種操作op1op2算術運算時間用C

op1: add1=a+b; 
op2: add2=c+d; 

哪個操作需要多長時間?

+2

你應該已經談到這裏代碼的複雜性,而不是執行時間!在完美(無偏)的環境中,兩者都是O(1)。 –

+0

恕我直言,雙方將導致相同的彙編指令,64位CPU可以在同一時間,我會承擔添加任何64位數字。 –

+0

16位架構或更低,將會快於2.在大多數人是一樣 –

回答

4

在帶有「常規」編譯器的「常規」CPU上,根據原則,它們將採用完全相同的時間(通常,兩個原始大小的寄存器之間的add採用相同的時間,而不考慮操作數值) 。

OTOH在現代CPU上很難測量指令所花費的時間,因爲實際的吞吐量在很大程度上取決於管道的狀態,如果存在數據依賴性,如果分支預測器正確猜測和什麼。所以,如果出於某種奇怪的原因,操作具有某種數據相關的(比如,中a值在條件語句改變),或者 - 上帝保佑它 - 必須從存儲器中取出(=>進入高速緩存機械)是一個完全不同的遊戲,唯一安全的選擇就是衡量它。

但最可能的是,這兩個操作將採取嚴格爲零的時間;任何啓用了優化的現代編譯器都會執行常量傳播和表達式摺疊,因此輸出可執行文件只會將操作的結果嵌入發送的指令中作爲立即值。