İçeriğe geç

C Programlama Dinamik Bellek Yönetimi

Yazılım geliştiricilerin dikkat etmesi gereken konuların başında tabii ki ürettiği yazılımın sistemin kaynaklarını en verimli şekilde kullanmasıdır. Nasıl ki sınırsız kullanıcı talebi olmazsa sınırsız sistem kaynağıda olamaz.

En önemli sistem kaynaklarında biride istemci/sunucu tarafından kullanılan bellektir.

Eğer yazılımcı bellek yönetimini iyi yapmıyorsa doğal olarak daha fazla belleğe ihtiyaç duyar. Daha fazla belleğe ihtiyaç duymakta; fazla maliyete ve programın yavaş çalışması gibi sorunları meydana getirir.

STATİK VE DİNAMİK DİZİ

Statik Dizi

Bir C programını yazarken; dizinin boyutu ve kaç elemanlı olduğunu programın başında belirtilirse, derleyici o dizi için gereken bellek alanını program sonlanıncaya kadar saklı tutar ve bellek alanı başka bir şey için kullanılmaz. Bu tür dizilere statik dizi denir.  Statik dizinin boyutuna programın çalışması esnasında herhangi bir müdahalede bulunamayız.

Dinamik Dizi

Program çalışırken bir dizinin boyutu ve eleman sayısı bazı yöntemler kullanılarak değiştirilebilir. Bu tür dizilere dinamik dizi  denir.

Dinamik diziler için gereken bellek bölgesi,derleyici tarafından işletim sisteminden istenir,kullanılır ve daha sora istenirse bu bölge boşaltılır.

Örneğin;

Char isim[20];

İfadesinde derleyici tarafından, bellekten 20 byte boyutunda sürekli bir alan tahsis edecektir. Bu yer tahsisi, program başlatılmadan önce yapılmaktadır. Yani program çalışırken bu dizinin boyutunu değiştimemiz mümkün  değildir.

Fakat bazı durumlarda (genelde) bellekten boyutu sabit olmayan ve sürekli değişebilen yerler tahsis etmemiz gerekecektir.

Bir örnek vermek gerekirse; telefon rehberi yazılımı geliştirmek istediğimizi düşünelim. Tahsis edilecek bölgenin boyutunu önceden tahmin edebilir miyiz? Her yeni telefon eklendiğinde bellekte ayırdığınız yeri büyüterek belleği en verimli şekilde kullanmak durumundayız.

Dinamik bellek yönetimi ile programın çalışma sırasında işletim sistemine danışarak sürekli bellek bölgeleri tahsis ederiz.

Dinamik Bellek Fonksiyonları

Mallaoc() Fonksiyonu:

Bu fonksiyon bellekten bizim belirlediğimiz miktarda bir alnın ayrılmasını sağlar ve bu alanı başlangıç adresini  tutan bir işaretçi döndürür. Biz bu bellek alanını free fonksiyonu ile boşaltmadığımız sürece işletim sistemi bu bellek alanına dokunmaz.

Free() Fonksiyonu:

Bu fonksiyon malloc ve malloc türevi (calloc,realloc) fonksiyonları tarafından ayrılan bellek alanını diğer uygulamaların kullanımına tekrardan açılabilmesi için hafızaya iade eder.

Calloc() Fonksiyonu:

Malloc fonksiyonu tahsis ettiği bellekteki bölgelere herhangi bir ilk değer ataması yapmaz. Yani bellekteki değerleri ile beraber size tahsis eder, ilk değer atama işlemi yazılımcıya kalmıştır.

Calloc fonksiyonu ise bellek tahsisi yaparken malloc() fonksiyonu kullanır, farklı olarak ayırdığı bellek bölgesini sıfırlamaktatır.

Realloc() Fonksiyonu:

Malloc veya calloc fonksiyonu ile oluşturmuş olduğumuz dinamik dizde eleman sayısının arttırmak istediğimizde kullanacağımız fonksiyonumuzdur.

Şimde tüm bu fonksiyonlarımızı nasıl kullandığımızı bir örnek üzerinde gösterelim…

Örnek:

Tarih:Yazılım/Teknoloji

4 Yorum

  1. Ömer Serfice Ömer Serfice

    güzel anlatım

    • damlakayali damlakayali

      Teşekkürler.

  2. Muhamed Muhamed

    çok faydalı oldu

  3. abdullah abdullah

    tebrikler,sade anlatım

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir