CodeBlanks Logo Icon CodeBlanks

Relocation

Relocation ve adres düzeltme öğrenirsin.

Relocation nedir?

Relocation (yeniden konumlandırma), bağlayıcının nesne dosyasındaki göreli adresleri son adreslere düzeltmesidir. Derleyici, her fonksiyon ve değişkene göreli adres verir; bağlayıcı bölümleri birleştirince bu adresler kayar.

Her adres düzeltmesi, nesne dosyasındaki bir relocation girdisinde kaydedilir. Bu girdi, hangi adresteki değerin düzeltileceğini ve nasıl düzeltileceğini söyler. Bağlayıcı, tüm bölümleri yerleştirdikten sonra her relocation girdisini işler ve ilgili adreslere son değerleri yazar. Bu süreç, ayrı derlenen dosyaların tek bir çalıştırılabilire birleşmesini sağlar.

Adres düzeltme nasıl çalışır?

Bağlayıcı, relocation girdilerini işlerken her başvurunun hedef sembolün son adresini hesaplar. Örneğin, bir fonksiyon çağrısı call add derleyici tarafından göreli bir adrese çevrilir; bağlayıcı add'in son adresini bulur ve çağrı komutunu düzeltir.

İşlev göstergeleri (function pointers) bu mekanizmanın çalışma zamanı karşılığıdır: bir işlevin adresi bir göstergeye atanır ve bu gösterge üzerinden çağrı yapılır. Derleme zamanında adres bilinmeyebilir; çalışma zamanında gösterge aracılığıyla çağrı yapılır. Bu desen, relocation mantığını kod düzeyinde gösterir.

Uygulama İşlev göstergesi ile çağrı

int add(int a, int b) { return a + b; } yaz. int main(void) içinde int (*op)(int, int) = add; tanımla. printf("Sonuç: %d\n", op(40, 2)) ile çağır ve yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// add fonksiyonu yaz
// işlev göstergesi tanımla
// çağır ve yazdır

Örnek çözüm

main.c
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main(void) {
    int (*op)(int, int) = add;
    printf("Sonuç: %d\n", op(40, 2));
    return 0;
}

Beklenen çıktı

Sonuç: 42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Relocation kavramını eşle

Kavram Anlamı
Göreli adres Derleyici verir
Son adres Bağlayıcı verir
Relocation girdisi Düzeltme kaydı
Sembol tablosu İsim listesi

2 İşlev göstergesi atamasını tamamla

Soru
int add(int a, int b) { return a + b; }
int (*op)(int,int) = ____;
Cevap
int add(int a, int b) { return a + b; }
int (*op)(int,int) = add;

Açıklama: İşlev adı, işlevin adresini verir; göstergeye atanabilir.

3 Relocation neyi düzeltir?

  • Tip adlarını
  • Adresleri Doğru cevap
  • Dize değerlerini
  • Yorumları

Açıklama: Relocation, göreli adresleri son adreslere düzeltir.

Uzman bölümündeki tüm dersler