Satır içi işlevi kullanmak ve kullanmak için zaman zaman? | Netgez.com
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

  • discokatze

    discokatze

    23 EYLÜL 2009
  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011