2011-09-03 27 views
6

DLL işlevlerini çağırırken bir performans cezası ne kadar büyüktür? DLL yükleme bizim için bir sorun değil, bizim highperf kütüphane çağrıların sayısı büyük olmayacaktır.DLL işlev çağrı yükü

Yaklaşık, bir çağrı statik kitaplık çağrısı üzerinden kaç tane komut/saat döngüsü yapar?

+0

olası yinelenen (http://stackoverflow.com/questions/4030043/overhead-of-dll) –

cevap

11

Benim cevabım nasıl Linux/glibc/ELF dinamik bağlayıcı eserler dayanır ama genel cevap diğer platformlar için aynı olduğunu varsaymak gerekir: bir dinamik yüklü ilk çağrısı arasında bir fark yoktur

sembol ve sonraki çağrılar. İlk çağrı pahalı, birçok döngü içerebilir. Diğer tüm çağrılar az ya da çok 1 - 2 dir.

İşleyiş şekli bağlantı elemanının, Global Offset Tablosundan bu dış işlev için bir adres kaplayan Prosedür Bağlantı Tablosunda bir giriş oluşturmasıdır. İlk başta GOT puanlarının adresini, DLL'deki işlevin gerçek adresini çözmek için dinamik bağlayıcıyı çalıştıran bir sapla çağırın. Bu çok sayıda döngü yapabilir, ancak bir kez yapıldıktan sonra, dinamik bağlayıcı GOT girişini doğrudan işleve yönlendirecek şekilde yönlendirecektir, böylece PLT kodunun bir sonraki çağrısında doğrudan işleve çağrı yapılacaktır. http://www.technovelty.org/linux/pltgot.html

[DLL Tepegöz] arasında
+1

: Burada

bu sürecin içinden oldukça iyi bir yürüyüş bağlantısıdır Windows'da bir DLL'de tüm bu çalışma yükleyici tarafından modül yükleme zamanında yapılır. –

+0

Yalnızca DLL'nin LoadLibrary ile dinamik olarak yüklenmemiş olması durumunda bunun doğru olduğuna inanıyorum. –

+0

@Tamas: Neden? Çünkü çalışma zamanı yüklemesine ihtiyacımız var. – Cartesius00

İlgili konular