Relocation
- C kursu
- Uzman
- Ders 33/47
- 5 dk
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
#include <stdio.h>
// add fonksiyonu yaz
// işlev göstergesi tanımla
// çağır ve yazdırÖrnek çözüm
#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
int add(int a, int b) { return a + b; }
int (*op)(int,int) = ____;
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.