Standart C Programlama Dili


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 (segment:offset) ş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)11SLIBCE.LIB
kısa (compact)1çokCLIBCE.LIB
orta (medium)çok1MLIBCE.LIB
büyük (large)çokçokLLIBCE.LIB
dev (huge)çokçokLLIBCE.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.