2015-07-11 34 views
1

我碰到了一些舊的源代碼最近,我注意到這樣一個模式:正在使用一個int,然後增加它比同時執行兩個更慢?

T item = array[index]; 
index++; 

它會以更快的速度將它表示爲

T item = array[index++]; 

?直到最近我還以爲不會有什麼區別,因爲我認爲它是index = index + 1的簡寫,所以無論哪種方式,您都會忽略index兩次。但this post讓我覺得不然;相反,您只能獲得index的值一次。

這會在性能上產生任何差異(無論小小)還是現代JIT優化了這一點?

+0

您想知道哪種語言?爲什麼標記Java和C#? – hagrawal

+0

@hagrawal因爲JVM和CLR都是JIT,而且就我的理解而言,它們的功能是類似的(另外,增加一個'int'大多是與語言無關的)。 –

+0

你的2個代碼片段是在哪種循環 - 爲,而?? – hagrawal

回答

3

大多數現代人語言研究編譯期間將優化或執行時間。 這樣簡單的事情將在編譯過程中直接優化。

但要注意你的爲例只是一個錯字的問題,在2例Java將理解 T item = array[index++];由:

  • 獲取對象的索引位置
  • 加1到指數

這與寫作相同

T item = array[index]; 
index++; 

(但不一樣的東西,T item = array[++index];等價於:

index++; 
T item = array[index]; 

編輯: 我還可以補充一點,就是這些環太完善,編譯或執行時間 在C爲例或C++

for(int i = 0; i < 1000; i++) { 
    t[i] = 0 
} 

將成爲等同於

for(int i = 0; i < 1000; i++) { 
    *(t++) = 0 
} 

最後,編譯器和虛擬機將改善你的代碼,更多地考慮選擇的算法和數據結構。

1

我相當肯定,在你做其他動作的同一行上增加所述整數被認爲是不好的做法。

喜歡的東西,你所提供的例子(T item = array[index++];)將成爲最佳類似

index++ 
T item = array[index]; 
+1

根據Java語言規範,確實是不好的做法:「當每個表達式包含至多一個副作用時,代碼通常更清楚,作爲其最外層操作,並且代碼並不完全依賴於由於左表達式的正確評估「。 [15.7。評估訂單](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.7) –

相關問題