SORU
19 Aralık 2009, CUMARTESİ


Satır içi işlevi kullanmak ve kullanmak için zaman zaman?

Bu satır derleyici için bir ipucu ya da bir istek olduğunu biliyorum Ve onun işlev çağrısı giderleri önlemek için kullanılır.

Çok temel bir işlevi satır içi uygulaması için bir aday olup olmadığını belirlemek ne ya ? Bu durumda bir satır içi uygulaması kaçınmalısınız ?

CEVAP
19 Aralık 2009, CUMARTESİ


Bir işlev çağrısı maliyet kaçınarak, bu hikayenin sadece yarısı.

yapın:

  • #define yerine inline kullanın
  • çok küçükfonksiyonlar inline için iyi adaylar şunlardır: daha hızlı ve daha küçük çalıştırılabilir kod (kod önbelleğinde kalmak için daha fazla şansı)
  • küçük işlevidirveçok sık aradı

yok:

  • büyük fonksiyonlar: arama Tepegöz kaynaklanan performans önemli ölçüde daha hızlı yürütme ne olursa olsun bozar büyük çalıştırılabilir, yol açar
  • I/O satır içi işlevleri bağlı O
  • işlevi nadiren kullanılır
  • boş olsa bile, derleyici onlar için kod oluşturur . kurucular ve yıkıcılar:
  • kırma kütüphaneleri geliştirirken uyumluluk ikili:
    • varolan bir işlev satır içi
    • bir satır içi işlev veya olmayan satır satır içi işlevi: kütüphane çağrısı önceki sürüm eski uygulama

bir kütüphane geliştirilirken, gelecekte sınıf genişletilebilir yapmak için:

  • eğer vücut boşsa bile olmayan içi sanal yıkıcı ekleyin
  • tüm kurucular olmayan satır içi yapın
  • sınıf olamaz değerine göre kopyalanır sürece kopya Kurucu ve atama işleç olmayan içi uygulamaları yazın

Hatırladığım inline anahtar kelime bir ipucu için compiler: derleyici olabilir karar değil, bir satır içi işlev ve karar vermek için satır içi işlevleri bu değildi işaretli inline ilk başta. Ben genellikle işaretleme fonksiyonu inline (belki çok çok küçük fonksiyonları yazarken ayrı) kaçının.

Performans hakkında, akıllıca yaklaşımdır (her zamanki gibi) uygulama profili için, sonunda inline fonksiyonlar kümesi bir engeli temsil ediyor.

Referanslar:


EDİT: C Programlama Dili, Bjarne Stroustrup:

Bir fonksiyon inline olmak tanımlanabilir. Örneğin:

inline int fac(int n)
{
  return (n < 2) ? 1 : n * fac(n-1);
}

inline belirtici bir ipucu için derleyici lazım girişimi için kod üretmek için bir çağrı fac() satır içi yerine koyan kodunun işlevi bir kez o arama ile normal işlev çağrısı mekanizması. Akıllı bir derleyici bir çağrı için 720 sürekli fac(6) oluşturabilir. Karşılıklı özyinelemeli satır içi işlevleri olasılığı, satır içi işlevleri recurse veya giriş bağlı olarak, vb. değil, imkansız inline bir işlevin her çağrısı aslında inlined olduğunu güvence altına almak için yapar. Bir derleyici 720 başka 6 * fac(5) ve başka bir un-inlined bir oluşturabilir böylece yasalaşması edilemez bir derleyici zeka derecesi fac(6) Ara.

Olası olağanüstü zeki derleme yokluğunda satır içi uygulaması yapmak ve tesisleri birbirine bağlayan, tanımı ve bildirim–bir satır içi işlevi kapsamında (§9.2) olmalıdır. inline bir especifier bir işlevi anlamı etkilemez. Özellikle, bir satır içi işlevi hala benzersiz bir adresi vardır ve bu yüzden static değişkenler (§7.1.2) bir satır içi işlevi vardır.

EDİT2: ISO-IEC 14882-1998, 7.1.2 Fonksiyon belirteçleri

inline belirleyici bir işlev bildirimi (8.3.5, 9.3, 11.4) bir satır içi işlev bildirir. Satır içi belirleyici çağrı noktasında işlevi vücudun içi yerdeğiştirme normal işlev çağrısı mekanizması için tercih edilecek olan uygulama gösterir. Bir uygulama aramak noktasında bu satır içi yer değiştirme için gerekli değildir; eğer bu satır içi ikame girilmediği takdirde bile ancak, satır içi işlevleri 7.1.2 tarafından tanımlanan diğer kurallar hala saygı duyulmalıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • LAHWF

    LAHWF

    5 Kasım 2009
  • spederson7

    spederson7

    17 Temmuz 2006