C.1. Bellek Modelleri
⚠
Uyarı
Kitabın bu kısmı
eski bilgiler içermektedir. Ancak, okuyucunun
yararına olabileceği düşünülerek aynen korunmuştur.
Bir C programının Microsoft C Eniyileştirici Derleyicisi kullanılarak nasıl derleneceğine geçmeden önce, C bellek modellerini bilmek ve anlamak gerekir.
80x88 ve 80x86 işlemcilerinin
yapısından dolayı, bir bellek adresi 16 bitlik kesim adresi ile kesim
içinde 16 bitlik bir uzaklıktan oluşur. Böyle bir adres normalde
kesim:
uzaklık
şeklinde gösterilir. Verimlilik açısından, bir programın aynı kesim içinde
kalan adresler üretmesi daha iyidir, çünkü adresleme sadece uzaklık
oluşturularak sağlanabilir. Sadece uzaklık bölümünden oluşan bir adrese
yakın adres
adı verilir. Bazen, program, başka kesimlerde bulunan
nesneleri adreslemek durumunda kalabilir; böyle adreslere
uzak adres
adı verilir. Uzak bir adres 32 bittir ve kesim temel adresi ile uzaklıktan
oluşur. Bir kesimden, yani 64 Kbayttan daha büyük olan bir veri yapısı,
örneğin bir dizi, uzak adres kullanılarak adreslenemez. Bu amaç için,
dev adres
adı verilen başka bir adres tipi kullanılır. Dev
adreslerin uzak adreslerden farkı göstergelerde ortaya çıkar; uzak
adreslerde göstergeler 16 bit olmalarına rağmen, dev adreslerde 32 bittir.
Bir C programı derlendikten sonra, en az bir veri kesimi ve bir kod kesiminden oluşur. Bu, olası en küçük C programı için bile geçerlidir. Büyük C programları birkaç veri kesimi, yani çok fazla ve büyük veri yapıları ve/veya birkaç kod kesimi, yani birçok yürütülebilir deyim şeklinde oluşabilirler. Büyük programların doğru bir şekilde derlenip yürütülebilmeleri için, Microsoft C’ye bellek modelleri konmuştur. Aşağıdaki çizelge bellek modelleri arasındaki farkları göstermektedir:
Model | Kod kesimi sayısı | Veri kesimi sayısı | Kullanılan kütüphane |
---|---|---|---|
minik (tiny) | kod ile veri toplam 1 kesim | SLIBCE.LIB | |
küçük (small) | 1 | 1 | SLIBCE.LIB |
kısa (compact) | 1 | çok | CLIBCE.LIB |
orta (medium) | çok | 1 | MLIBCE.LIB |
büyük (large) | çok | çok | LLIBCE.LIB |
dev (huge) | çok | çok | LLIBCE.LIB |
Microsoft C Eniyileştirici Derleyicisi (MS-CL) için varsayılan model küçük olandır; Microsoft QuickC (MS-QC) ise her zaman orta modelde çalışır.