SORU
22 Kasım 2008, CUMARTESİ


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
23 Kasım 2008, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013
  • Vsauce

    Vsauce

    30 Temmuz 2007