Forum: Diğer Konular RSS
C++ - inline Anahtar Kelimesi İle İlgili Suallerim
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++ - inline Anahtar Kelimesi İle İlgili Suallerim
Selamün Aleyküm, Hayırlı Bayramlar;

1-) C++'da inline anahtar kelimesinin fonksiyonun içerisine girmek yerine fonksiyon içeriğinin fonksiyonun çağrıldığı yere kopyalandığını biliyoruz lakin bunun çalışıp çalışmadığını nasıl anlayabiliriz? inline kullanımını neye göre belirlemeliyiz?

2-) static olan (üye) fonksiyonlarda inline anahtar sözcüğü kullanılır mı? Yani inline static Tip FonksiyonAdı() şeklinde kullanmak bize fayda sağlar mı? (Bu şekilde kod çalışıyor lakin faydası var mı?). Teşekkürler!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
inline sözcüğü için seneler öncesinden beri "bir tür boşluk karakteri" diye söz edilirdi (etkisiz olduğu için.) Günümüzdeki karmaşık mikroişlemci teknolojileri göz önüne alındığında böyle bir eniyileştirme kararını programcının derleyiciden daha iyi yapabileceği düşünülmüyor. C++ derleyicileri inline sözcüğünü hiç dikkate almayabilirler. (Hem dil kuralı olarak hem uygulama olarak.)

Herhangi bir işlevin inline olup olmadığını anlamanın en iyi yolu, derleyicinin ürettiği assembly çıktısına bakmaktır.

static'le kullanımında dil kuralı açısından bir fark yok. Yarar getirip getirmediğini de ölçerek görmek gerek.

Ali
kerdemdemir #3
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Selamlar!!

Benim aklıma eklemeye değicek bir şey geldi paylaşmak istedim.

ODR(One Definition Rule) dolayısıyla bir fonksiyon birden fazla tanımlamaz. Yani bir kere tanımladığımız fonksiyonu başka bir header dosyasında bir daha tanımlamaya çalışırsak bir compile hatası alırız.

Aynı anda geçmişten gelen bağımlılıklardan dolayı C++ 'da modüller yerine .h ve .cpp dosyaları var. Bazen benim gibi tembel programcılar sadece .h yazmak istiyorlar. Fakat eğer bu header dosyası iki yerde include edilirse ODR bozulmuş oluyor. Header dosyasını include etmek biraz copy paste gibi etkisi olduğundan dolayı hata alıyoruz.

Bu durumda eğer header dosyasına yazdığımız fonksiyonu inline olarak tanımlarsak; compiler fonksiyon tanımlaması yerine fonskitonun çağrıldığı her yere fonksiyonun derlenmesi sonuçu oluşturulan makine kodunu direk gömüyor. Bu bir tanımlama olarak sayılmadığından ODR bozulmamış oluyor.

Eğer fonskiyon eğer sınıf "method"'u  ise eğer inline kelimesi koymasak bile compiler direk inline keyword unu koyuyor.

Bu kullanımı hariç inline kelimesinin Ali Hocamızın belirttiği gibi compiler'a bırakılması daha iyi .Çünkü fonksiyon çağrısı yerine  çağrılan fonksiyonun makine kodlarının gömülmesi, çağrı yapılan fonksiyonun büyümesine neden oluyor. Eğer fonksiyon çok fazla büyürse bu "Cache miss" ve hatta "Page miss" gibi etkiler dolasıyla performans düşüşü olabiliyor.

Yani üç kuruşluk fonksiyon çağırma maliyetinden kaçmaya çalışırken koskaca bir Ram'e gitme masrafına girebiliyoruz.

Bu konuda D dilininde kurucularından Andrei Alexandrescu'un 2014 C++ konferansında verdiği güzel bir konuşma vardı: https://www.youtube.com/watch?v=Qq_WaiwzOtI belki vaktiniz olur.

Sevgiler
Erdemdem
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 08:05:40 (UTC -08:00)