20 Ağustos 2020 Perşembe

C programlama dinamik bellek yönetimi

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.




Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...