2013-08-23 26 views
5

Bir öğretici veya For döngüsü sonrası artım sipariş witout klasik gösterdi bazı ders, görmedim. o artırılır alacak önceartırma öncesi - For döngüsü hız

for (int i=0; i<array.length; i++) {} 

Eğer SONRASI artışı kullanırsanız , değişken "i", önbelleğe olacak! Fakat bu hiç mantıklı değil, çünkü komut doğrudan biter. İlk döngüde

: Eğer şimdiye kadar anlamadı Eğer

for (int i=0; i<array.length; ++i) {} 

, ben (benim İngiliz sry) biraz daha ileri gidip: Bence

, bu daha mantıklı : i

  1. Önbellek gerçek değeri. (Not: arasında hiçbir hareket, bu yüzden bunu yapmak için hiçbir neden)
  2. Artış i
  3. ikinci döngüde önde

git

  1. Artır'ı i doğrudan
  2. Git önümüzde.

Yani ikinci döngü hiçbir kalite kaybı için daha performanslısı. Başka fikirlerin var mı? Java'da

+1

tek yolu bilmek. Bir int ile şüpheliyim ki bir fark yaratıyor. Bazı yineleyici türleri ile belki. ** Düzenle ** Burada C++ konuşuyorum. – juanchopanza

+2

"Değişken * önbelleğe alınacak *" derken, durum hakkında herhangi bir anlayış veya araştırma kullanıyor musunuz, yoksa sadece spekülasyon yapıyor musunuz? –

+6

Bir C++ etiketi gördüm, ancak sonra kayboldu ve sadece java'yı görüyorum, bu yüzden java için dup yayınladım. –

cevap

6

Bu düzeyde düşünme hiçbir anlamı yoktur. Java çalışma zamanı, Java kaynak kodunda tam anlamıyla yazdığınız şeyden çok uzaktır ve bu tür bir akıl yürütme herhangi bir anlamı yitirir. Spesifik olarak, JIT derleyicisi kodunuzu, makine kodu düzeyinde anlaşılmazlığa sürükleyecektir. İkinci çevrim (düzeneği kodu farklı si oluşturulan varsayılarak) ölçmek için daha ölçülebilir ise

+0

Yani hangi durumda yazdığınız önemli değil, derleyici ait olduğu şeylere yapar mı? Öğrencilere bu şekilde öneride bulunacağım ve (eğer öğretmen olsaydım) post-ve ön-koşul, çünkü bunun her zaman ilginç olabilecek bir “arka plan bilgisi” vardır. Ama ilginç, önemli değil. Thx, cevap verdin! :) – codepleb

+0

Java'nın Just-in-Time derleyicisi, neredeyse resmin içine bile girmeyecek çok daha karmaşık şeyler yapar. Örneğin, herhangi bir yan etkisi olmadığını fark ederse, tüm * döngüsünü * silebilir. –

+0

Bu doğru olabilir, ancak programlama-mantığı daha uygun olurdu, eğer bunu "benim" şekilde yaparsam, bunu anlıyorum. Tabii ki, önemli olmayabilir, ama neden mantığı yazmamalıyım, derleyici de yazar? Her neyse, iyi anwser, ama şu an yaptığım şeyi değiştirmeyeceğim. :) – codepleb

İlgili konular