DİNAMİK BELLEK YÖNETİMİ C dilinde bir dizi tanımlandığı zaman, bu dizi için derleyici tarafından bellekte yer ayrılır. Örneğin: int a[100]; Derleme sırasında yukarıdaki gibi bir dizi tanımlaması ile karşılaşan derleyici bellekte (eğer kullanılan sistemde int türü uzunluğunun 2 byte olduğu varsayılırsa) toplam 200 byte yer ayıracaktır. Programın çalışması sırasında bir dizinin uzunluğunu değiştirmek mümkün değildir. Diziler konusunda açıklandığı gibi, dizi tanımlama ifadelerinde dizi boyutunu gösteren ifade (köşeli parantezin içerisindeki ifade) sabit ifadesi olmalıdır, değişken içeremez. Çünkü derleyicinin bellekte yer ayırması için, dizi boyutunu bilmesi gerekir. Oysa pratikte birçok uygulamada açılması gereken dizinin boyutu programın çalışması sırasında (runtime) belirlenmektedir. Birtakım sayıların kullanılmak üzere klavyeden girildiğini düşünelim. Kullanıcının kaç tane sayı gireceğinin belli olmadığını düşünelim. Kullanıcının girdiği sayıları tutmak için açılan bir dizinin boyutu ne olmalıdır? Ya da bir dizindeki dosyaları sıraya göre dizmek için dosya bilgilerini geçici olarak bir dizide saklayacağımızı düşünelim. Dizinin uzunluğu ne olmalıdır? Bu başlangıçta belli değildir. Çünkü dizin içinde kaç dosya olduğu belli değildir. Bu tür örnekleri çoğaltabiliriz. Bu tip durumlara özellikle veri tabanı uygulamalarında sıklıkla raslarız. Bazı uygulamalarda dizilerin gerçek uzunluğu programın çalışması sırasında, ancak birtakım olaylar sonucunda kesin olarak belirlenebilir. Bu durumda dizilerle çalışan programcı herhangi bir gösterici hatasıyla karşılaşmamak için dizileri en kötü olasılığı gözönünde bulundurarak açmak zorundadır. Bu da belleğin verimsiz bir şekilde kullanılması anlamına gelir. Üstelik açılan diziler yerel ise ilgili blok sonlanana kadar, global ise programın çalışmasının sonuna kadar bellekte tutulacaktır. Oysa, dizi ile ilgili işlem biter bitmez, dizi için ayrılan bellek bölgesinin boşaltılması verimli bellek kullanımı için gereklidir. Programın çalışma zamanı sırasında belli büyüklükte ardışıl (contigious) bir bellek bölgesinin programcı tarafından tahsis edilemesine ve istenildiği zaman serbest bırakılmasına olanak sağlayan yöntemlere dinamik bellek yönetimi denir. C dilinde dinamik bellek yönetimi dinamik bellek fonksiyonlarıyla yapılmaktadır. Dinamik bellek yönetiminde kullanılan standart C fonksiyonları hakkında aşağıda detaylı bilgi verilmektedir. Şüphesiz bu fonksiyonların dışında, ticari derleyici paketlerinin kütüphanesinde, standart olmayan dinamik bellek fonksiyonları da bulunabilir. Ancak yazılan kaynak kodun taşınabilirliği açısından standart C fonksiyonları tercih edilmelidir.
20 Ağustos 2020 Perşembe
C programlama dinamik bellek yönetimi
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder
Her yorum bilgidir. Araştırmaya devam...