C
Statik ve dinamik
Statik ve dinamik bağlama arasındaki farkı öğrenirsin.
Statik bağlama
Statik bağlama (static linking), tüm kütüphane kodunun çalıştırılabilire gömülmesidir. Bağlayıcı, .a (arşiv) dosyalarından gereken nesneleri alır ve tek büyük çalıştırılabilire dahil eder.
Avantajı, sonucun bağımsız olmasıdır: hedef makinede kütüphane kurulu olması gerekmez. Dezavantajı, dosya boyutunun büyük olması ve güncelleme zorluğudur: kütüphane güncellenince tüm program yeniden bağlanmalıdır. C'de static anahtar sözcüğü ayrıca iç bağlantı (internal linkage) sağlar: bir değişken veya fonksiyon yalnızca kendi dosyasında görünür olur, diğer dosyalar tarafından kullanılamaz.
Dinamik bağlama
Dinamik bağlama (dynamic linking), kütüphane kodunun çalıştırılabilire gömülmediği; bunun yerine .so (shared object) dosyasına bir başvurunun bırakıldığı yöntemdir. Program çalıştırılınca, yükleyici (loader) kütüphaneyi belleğe yükler ve sembolleri çözümler.
Avantajı, küçük dosya boyutu ve kolay güncellemedir: kütüphane güncellenince program yeniden bağlanmaz. Dezavantajı, hedef makinede kütüphanenin kurulu olması gerekmesidir. extern anahtar sözcüğü, dış bağlantı (external linkage) sağlar: sembol diğer dosyalar tarafından görülebilir. Dinamik bağlama bu dış sembolleri çalışma zamanında çözümler.
Uygulama İç ve dış bağlantı
static int internal_counter = 5; tanımla (iç bağlantı). int external_counter = 10; tanımla (dış bağlantı). int main(void) yaz ve printf("Dahili: %d\n", internal_counter) ve printf("Harici: %d\n", external_counter) ile ikisini yazdır.
Örnek çözümü göster
#include <stdio.h>
static int internal_counter = 5;
int external_counter = 10;
int main(void) {
printf("Dahili: %d\n", internal_counter);
printf("Harici: %d\n", external_counter);
return 0;
}
Kendini test et
-
Statik bağlama ne üretir?
- Paylaşılan kütüphane
- Kaynak dosya
- Sadece başlık dosyası
- Tek büyük çalıştırılabilir
Cevabı göster
Tek büyük çalıştırılabilir — Statik bağlama tüm kodu tek çalıştırılabilire gömer.
-
İç bağlantı anahtar sözcüğünü tamamla
____ int internal_counter = 5;
Cevabı göster
static int internal_counter = 5;
-
Bağlama türünü eşle
- Statik
- Kod gömülür
- Dinamik
- .so yüklenir
- static anahtar
- İç bağlantı
- extern anahtar
- Dış bağlantı
Sıradaki ders: ELF format