SORU
18 EYLÜL 2012, Salı


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
18 EYLÜL 2012, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • campos9896

    campos9896

    24 Mart 2012
  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011
  • sinumatic

    sinumatic

    19 Aralık 2006