SORU
25 EKİM 2010, PAZARTESİ


Neden bir işlev çağrısı daha hızlı olarak satır içi uygulaması nedir?

Şimdi, bir işlevi çağırmadan yükü yok çünkü. ama işlevi gerçekten ağır bir çağrı Tepegöz (ve inlined olması kabartmak değer) olduğunu biliyorum ?

Ne ben bildim bileli, ne zaman bir fonksiyon denir, f(x,y), x ve y itilmiş üzerine yığını, yığın işaretçisi atlar için boş bir blok ve yürütme başlar. Bu biraz basite indirgemek olduğunu biliyorum, ama ben bir şey eksik? Birkaç iter ve bir işlev çağrısı için bir atlama, orada gerçekten bu kadar yükü?

Eğer bir şey, teşekkürler unutuyorum bana bildirin!

CEVAP
25 EKİM 2010, PAZARTESİ


Çağrı (ve bu nedenle ilgili harcamalar, görüşme öncesi parametre hazırlık ve arama sonrası temizlik gibi) yok olması bir yana, satır içi uygulaması bir diğer önemli avantajı var. İşlev gövdesi inlined olduğunda, bu vücut yeniden yorumlanması arayan özel şartlar çerçevesinde olabilir. Bu hemen daha fazla derleyici ve kod azaltmak optimize etmek için izin verebilir.

Basit bir örnek için, bu işlev

void foo(bool b) {
  if (b) {
    // something
  }
  else {
    // something else
  }
}

eğer non-inlined bir işlev olarak adlandırılan eğer gerçek dallanma gerektirir

foo(true);
...
foo(false);

Eğer yukarıdaki aramalar inlined ise, derleyici hemen dallanma ortadan kaldırmak mümkün olacak. Aslında, yukarıdaki dava satır içi uygulaması sağlar derleyici yorumlar işlevi argüman olarak bir derleme zamanı sabiti (eğer parametre bir derleme zamanı sabiti) - bir şey olduğunu genellikle mümkün olmayan inlined fonksiyonları.

Ancak, uzaktan bile olsa, bu sınırlıdır. Genel olarak, optimizasyon fırsatları satır içi uygulaması etkin önemli ölçüde daha geniş kapsamlıdır. Fonksiyonun içine inlined olduğunda başka bir örnek içinözelarayanın içerik, derleyici genel dava edebilir yaymak bilinen aliasing ile ilgili ilişkileri mevcut arama kodu inlined function code, böylece yapmak mümkün için optimize işlevin kod daha iyi.

Yine, mümkün olan en çok sayıda örnekler, hepsi inlined aramalar içine dalmış olduğu temel gerçeğini kaynaklananözelarayan bağlam, böylece olmayan inlined calles ile mümkün olduğu kadar ınter-bağlam çeşitli iyileştirmeler, etkinleştirme. Temelde özgün işlevin birçok bireysel sürümleri satır içi uygulaması ile, her sürümü hazırlanmış ve tek tek her bir özel arayan bağlam için optimize edilmiş. Bunun bedeli, açıkçası, kuralların potansiyel tehlike kabartmak, ama eğer düzgün kullanılırsa, fark performans yarar sağlayabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Break

    Break

    10 Aralık 2005
  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • Thom Hall

    Thom Hall

    24 Kasım 2006