Ne 'statik olarak bağlı' ve 'dinamik olarak bağlantılı' mı?
Ben sık sık duymak açısından 'statik olarak bağlantılı' ve 'dinamik olarak bağlı', sık sık referans kodu yazılı C, C C#, ama fazla bir şey bilmiyorum bir şey ya. Onlar, tam olarak ne hakkında konuşuyorlar, ve onlar birbirine bağlayan nedir?
CEVAP
Bu soruya iyi bir cevap bağlama ne olduğunu açıklamak gerektiğini düşünüyorum.
Bazı C kodu (örneğin) derleme, makine diline çevrilir. , Çalıştırmak, işlemci ekleme, çıkarma, karşılaştırma için neden sadece bir bayt dizisi, "git", bellek okuma, bellek yazma, bu tür bir şey. Bunları nesne saklanır (.Ç) dosyaları.
Şimdi, uzun zaman önce, bilim adamları bu "" şey. yordam icat -Bu öbek--Kodu-ve-iade-buradan yürütmek. En kullanışlı yazılımlardan özel bir yerde saklı ve onlara gereken herhangi bir program tarafından kullanılabilir olduğunu fark ettiler önce çok uzun değildi.
İlk günlerde artık programcılar bu altprogram yer olan bellek adresi yumruk olurdu. CALL 0x5A62
gibi bir şey. Bu bellek adresleri hiç değiştirilmesi gerekir sıkıcı ve sorunlu oldu.
Bu yüzden, süreci otomatik. printf()
, çağıran bir program yazıp derleyici printf
bellek adresini bilmiyor. Derleyici sadece CALL 0x0000
, yazar ve nesne dosyası söyleyerek bir not "bellek ile bu 0x0000 konumunu değiştirmek gerekir . ekler yani ^strong>basit bir beşgen kullanmaktır".
Statik bir bağlantı anlamına gelir linker programı (GNU olur ld) ekler printf
'nun makine kodunu doğrudan çalıştırılabilir dosya ve değişiklikler 0x0000 adresi printf
. Bu yürütülebilir dosya oluşturulmuş olur.
Dinamik bağlantı yukarıdaki adım olmaz anlamına gelir. Çalıştırılabilir dosyahalayazan bir not var", basit bir beşgen kullanmaktır hafıza konumuna 0x000 ile değiştirmek zorundadır." İşletim sistemi yükleyici, basit bir beşgen kullanmaktır kodu bul, belleğe yük ve ÇAĞRI adresinin doğru, gerekiyorher zaman programı çalıştırın.
Program dinamik olarak bağlı olan statik olarak bağlantılı olacak olan bazı işlevler (printf
gibi standart kütüphane fonksiyonları genellikle statik olarak bağlı) ve diğer işlevleri çağırmak için yaygın bir durumdur. Statik olanlar "" yürütülebilir ve dinamik olanlar "yürütülebilir" çalıştırın. katılmak parçası haline
Her iki yöntem de avantaj ve dezavantajları vardır, ve işletim sistemleri arasında farklılıklar vardır. Ama sormadın beri, bu burada son vereceğim.
Nasıl tam bir statik olarak bağlı yapa...
Yazılı ve dinamik olarak statik olarak...
Nasıl statik olarak bağlı kütüphaneler...
Bir statik olarak yazılan tam Lisp tür...
bir WordPress kullanmak .bir dinamik o...