X = daha hızlı bir x = x bir daha?
Stroustrup şey okuyordum "diyor nerede", C Programlama Dili bir değişken için bir şey eklemek için iki yol var
x = x a;
ve
x = a;
Daha iyi uygulanması muhtemeldir çünkü =
tercih ediyor. Çok daha hızlı çalışır demek istiyor sanırım.
Ama gerçekten öyle mi? Eğer derleyici ve diğer şeyler bağımlı olup olmadığını nasıl kontrol edebilirim?
CEVAP
Herhangi bir derleyici değer onun tuz oluşturur aynı makine dili dizisi için hem yapıları için herhangi bir dahili tip (int
, float
, vs.) olarak ifade gerçekten bu kadar basit x = x a;
ve en iyi duruma getirme etkin. (Özellikle, GCC varsayılan modu olan -O0
... ... gerçekleştiriranti-optimizasyonemin olmak için , belleği tamamen gereksiz mağazaları ekleme gibi, bu hata hep değişken değerlerini bulabilirsiniz.)
Eğer deyimi daha karmaşık ise, daha farklı olabilir. f
bir işaretçi, o zaman döndüren bir fonksiyon olduğunu varsayalım
*f() = a;
f
sadece bir kez, oysa çağırır
*f() = *f() a;
aramalar iki kez. Eğer f
yan etkileri varsa, ikisinden biri yanlış (muhtemelen ikincisi) olacaktır. Eğer f
yan etkisi yok olsa bile, derleyici ikincisi gerçekten yavaş olabilir, böylece ikinci çağrı ortadan kaldırmak mümkün olmayabilir.
Ve C bahsediyoruz beri burada, bu durum aşırı yük operator
operator =
sınıf türleri için tamamen farklıdır. x
böyle bir türü ise, o zaman önce -- optimizasyon -- x = a
çevirir
x.operator =(a);
x = x a
oysa çevirir
auto TEMP(x.operator (a));
x.operator=(TEMP);
Eğer sınıf doğru yazılmışvederleyicinin doktoru yeterince iyi değil, ikisi de aynı makine dili üreten rüzgar olacak, ama yerleşik türleri için olduğu gibi kesin bir şey değil. Bu Stroustrup =
kullanımını teşvik eder o zaman ne düşünüyor muhtemelen.
Python: neden * * * daha hızlı ve daha...
Java Dizi ya da Liste. Daha hızlı olan...
Neden UİBezierPath daha hızlı Çekirdek...
&; Daha hızlı &;=lt lt?...
'' 'eğer daha hızlı bir...