Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
NİŞANTAŞI ÜNİVERSİTESİ
Algoritma ve Programlama Dinamik Bellek Yönetimi NİŞANTAŞI ÜNİVERSİTESİ © Mühendislik Mimarlık Fakültesi mmf.nisantasi.edu.tr
2
Dinamik Bellek Yönetimi
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. NİŞANTAŞI ÜNİVERSİTESİ ©
3
Dinamik Bellek Yönetimi
Programın çalışma zamanı sırasında belli büyüklükte ardışıl (contigous) bir bellek bölgesinin çalışan program tarafından ayrılmasına 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. NİŞANTAŞI ÜNİVERSİTESİ ©
4
Dinamik Bellek Yönetimi
malloc fonksiyonu malloc fonksiyonu programın çalışma zamanı sırasında bellekten dinamik bir blok elde etmek için kullanılır. Fonksiyonun stdlib.h başlık dosyası içindeki bildirimi aşağıdaki gibidir: void *malloc(size_t nbyte); size_t türünün derleyiciyi yazanların seçimine bağlı olarak unsigned int ya da unsigned long türlerinden birinin yeni tür ismi olarak tanımlanması gerektiğini, ve sistemlerin hemen hemen hepsinde size_t türünün unsigned int türü olduğunu hatırlayalım. Fonksiyona gönderilecek arguman ayrılmak istenen bloğun byte olarak uzunluğudur. Ayrılan alanın sürekli (contigious) olması garanti altına alınmıştır. malloc fonksiyonunun geri dönüş değeri elde edilen bellek bloğunun başlangıç adresidir. NİŞANTAŞI ÜNİVERSİTESİ ©
5
Dinamik Bellek Yönetimi
Ayrılan Bloğun Serbest Bırakılması Dinamik bellek fonksiyonlarıyla elde edilen bir blok C'nin standart fonksiyonlarından free fonksiyonu kullanılarak sisteme geri verilebilir. free fonksiyonunun bildirimi de diğer dinamik bellek fonksiyonlarınınkiler gibi stdlib.h başlık dosyası içindedir: void free(const void *block); free fonksiyonuna gönderilecek olan arguman, daha önce malloc, calloc ya da realloc fonksiyonlarıyla elde edilmiş olan bellek bloğunun başlangıç adresidir. free fonksiyonu çağrısıyla bu blok heap alanına geri verilmiş olur. heap alanına geri verilen blok malloc, calloc ya da realloc fonksiyonları tarafından yeniden elde edilme potansiyeline girecektir. NİŞANTAŞI ÜNİVERSİTESİ ©
6
NİŞANTAŞI ÜNİVERSİTESİ ©
kaynaklar Brian W. Kernighan , Dennis M. Ritchie, (1988), C Programlama Dili – ANSI C, DAISYSCIENCE, Editor: Dr. Rifat Çölkesen . Necati Ergin, C Ders Notları, C ve Sistem Programcıları Derneği NİŞANTAŞI ÜNİVERSİTESİ ©
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.