 |
dinamik bellek |
Dinamik bellek yönetimi C programlamada önemli bir yere sahiptir. Özellikle Veri Yapıları konusunda dinamik bellek yönetimi ile ilgili birçok işlem gerçekleştirilecektir.
Dinamik Bellek Yönetimi Nedir?
Dinamik bellek yönetimi kavramını anlamak için, dinamik olmayan bir yapıya bakmamızda fayda var. C programlamada kullandığımız array yani dizi yapısı dinamik olmayan bir yapıya sahiptir. int dizi[10] dediğimizde 11 eleman tutacak bir yapı oluşturmuş oluruz. Bu sayının üzerinde veri girememekle beraber, bu sayının altında bilgi girsek de diziyi bu boyutta oluşturduğumuz için hafızada belirttiğimiz boyutta yer kaplayacaktır. Daha az veri girmemiz işi değiştirmeyecektir.
Dinamik bellek yönetiminde ise veri için ayrılacak hafızayı biz belirleriz. Bu belirleme işlemiyle birlikte güvenli bölgeden itibaren hafıza saklaması gerçekleşir ve ayırdığımız hafızayı yalnızca biz kullanabiliriz. Bunun da yanında, kullandığımız hafızayı boşaltabilir, tekrar bilgisayarın kullanımına verebiliriz. C ve C++ dilleri bize bu konuda büyük bir esneklik sağlamaktadır.
Dinamik Bellek Yönetiminin Avantajları Nelerdir?
En önemli avantajı sadece ihtiyacımız kadar olan alanı kullanmamızı sağlar, fazladan alan işgal etmediğimizden programlarımız çok daha verimli çalışır. Bunun da yanında, hafıza adresleri pointer tipinde tutulduğu için bir başka hafıza bloğuyla verilerimizi birleştirme işlemimiz çok kolay gerçekleşmektedir.
Dinamik Bellek Yönetimi Fonksiyonları Nelerdir?
- Malloc
- Alloc
- Realloc
- Free
Malloc Fonksiyonu Ne işe Yarar?
Veri Yapıları derslerinde sıkça kullanacağınız Malloc fonksiyonu dinamik bellek yönetiminin temelini oluşturur. Malloc fonksiyonu bizim için hafızada istediğimiz kadar yer ayırır. Bize başlangıç adresini gönderir. (bkz: Pointer yapısının avantajları)
char *d;
d= malloc(5);
yukarıda deneme adında bir char pointerı oluşturduk. Bu pointera malloc(5) ifadesi ile 5 bytelık bir alan ayırdık. Eğer *d pointerını ekrana yazdıracak olursanız, ayrılan hafızanın başlangıç adresini görebilmeniz mümkündür.
Hafıza ayırma işleminin başarılı olup olmadığını if(deneme) statementı ile kontrol edebilirsiniz. Eğer hafıza ayırma işlemi başarılı olmuşsa if bloğunun içerisine girecektir.
Malloc Sizeof fonksiyonu sıklıkla kullanılan bir yöntemdir. Eğer malloc fonksiyonunun içerisinde bir değişkenin boyutu kadar değer oluşturulmasını isterseniz malloc(sizeof(struct node)) tipi bir kullanım gerçekleştirebilirsiniz. Böylece, node structımızın boyutu kadar bir alan ayrılmış olacaktır.
Free Fonksiyonu Ne İşe Yarar?
Free fonksiyonu Malloc fonksiyonu ile sıklıkla kullanılan bir fonksiyondur. Hafızada ayrılan yeri boşaltır. Dinamik programlamanın ufak bir dezavantajı da ayırdığınız alanı kendinizin boşaltması gerekliliğidir. Eğer boşaltmazsanız programınız çalıştığı sürecek o alan saklı tutulmaya devam edecektir.
free(d);
Yukarıda d değişkenine ayırdığımız değeri free komutu ile serbest bırakıyoruz. böylece tuttuğumuz bilgiler gidecektir.
Mutlaka Bakın!
Etiketler: dinamik bellek yönetimi, free fonksiyonu, malloc fonksiyonu, Malloc Sizeof fonksiyonu, Veri Yapıları