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

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • Kyler Briskey

    Kyler Briske

    20 ŞUBAT 2011
  • optionalinfo

    optionalinfo

    29 EKİM 2005