Hocam gerekli gereksiz herşeyiyle gelir. statik çağrılanlar ok ama dinamik olarak neye ihtiyaç duyulacağını tam bilemez compiler. onun için heryşeyiyle gmer. HolyOne tarafından 25/Ağu/12 11:52 tarihinde düzenlenmiştir Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı ktektir!

Linker ayarlarına bağlı. Harici bağlamada default olarak kullanılmayan fonksiyonlar çıkarılır. Fakat misal VS'da debug mode'da ise linker optimizasyonu default olarak kapalı olduğundan tutar. Release mode'da ise linker optimizasyonu default olarak açıktır, tutmaz. Bu sebeple linker ayarlarından optimizasyon için gerekli parametreleri eklemen gerekebilir. Hangi linker'ı kullanıyorsan dokümantasyonundan optimizasyon için gereken parametreleri ğrenebilirsin.

Şimdi benim merak ettiğim konu şu biz programı yazdık diyelim obje oluştü peki link leme işleminde dışarıdaki belli şeylere bağlama yapılıyor merak ediyorum lib dosyalarında. a yada. lib yada bir diğer obje ile linkleme yapılırken sadece gerekli fonksiyonlar mı alınıyor yoksa durum daha mı farklı Teşekkür ederim Bize çağ dışı diyorlar Doğrudur; Çağlar açtık, çağlar kapattık Çağlar bizden geri!

Hm teşekkür ederim bunu hep merak ediyordum ancak şyle bir bakım dedim kimse bahsetmemiş Bize çağ dışı diyorlar Doğrudur; Çağlar açtık, çağlar kapattık Çağlar bizden geri!

Evet. Daha detaylı açıklamak gerekirse static linking'de herhangi bir optimizasyon yapılmamış ise kütüphanedeki fonksiyon/datalar doğrudan alınır. Bu da farklı ortamlarda çalışacağından emin olmanı sağlar. Aynı zamanda static linking'te kod senin yazılımına dahil olduğundan daha performanslı çalışır. Fakat dosyanı fazlasıyla şişirir. Bundan kurtulmak ise linker'ın yeteneklerine ve kütüphanenin durumuna bağlıdır. Zira kullanılan kütüphane fonksiyonları kütüphane içerisinde farklı fonksiyonlara, dataya ihtiyaç duyuyorsa onların da dahil edilmesi gerekir ki, eğer onlar da statik olmayan ve bununla beraber iyi yazılmamış fonksiyonlar ise ve kütüphane fonksiyonları arasındaki bağımlılık varsa o zaman optimize etmeye kalksan da pek değişen bir şey olmayacağı gibi linker'ın yeteneklerine gre bu konuda ciddi sorunlar yaşayabilirsin. Compiler kod bünyesindeki kullanılmayan static fonksiyonları çıkarabilir. Fakat harici bağlama optimizasyonu ancak linker tarafından yapılabilir. Kullanılmayan fonksiyonlar çıkarılacak ise dediğim üzere kütüphanenin durumunu ve linker'ın yeteneklerini gz nüne alman lazım. Grece bir durum. Fakat günümüzde bu konuda standart kütüphaneler ve linkerlar konusunda pek sıkıntı yaşayacağını sanmıyorum. Optimizasyona gidebilirsin. Fakat yaptığın işin de bilincinde olursan ayakların yere sağlam basar. Dynamic linking'te ise dll kullanmak yazılımının boyutunu nemsiz miktarda etkiler ama dll'in load edilmesi ve zıplama aşamaları vs. performansı düşürür. Ayrıca standart durumda kalmayan, değişmesi muhtemel herhangi bir bir dll dosyasına bağımlı kalırsan static linking'teki gibi kodunun çalışacağından emin olamazsın. Bu sebeple şartları iyi değerlendirmen lazım.