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
Bir işlev çağrısı maliyet kaçınarak, bu hikayenin sadece yarısı.
yapın:
#define
yerineinline
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:
- To Inline or Not To Inline
- [9] Inline functions
- Policies/Binary Compatibility Issues With C
- GotW #33: Inline
- Inline Redux
- Etkili C - Madde 33: Kullanmak mantıklı . satır içi uygulaması
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çin720
süreklifac(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ızinline
bir işlevin her çağrısı aslında inlined olduğunu güvence altına almak için yapar. Bir derleyici720
başka6 * fac(5)
ve başka bir un-inlined bir oluşturabilir böylece yasalaşması edilemez bir derleyici zeka derecesifac(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üzdenstatic
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.
(Ya da ihmal) kullanmak için zaman var...
Ref vs kullanmak için zaman...
Vanilya JavaScript vs kullanmak için n...
div ne zaman bir eylemi tetiklemek içi...
UİView'ne kullanmak için zaman çe...