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

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009