Zamanınız sınırlı, başkalarının hayatını yaşayarak bunu ziyan etmeyin.

24 Temmuz 2014 Perşembe

Dinamik Bellek Yönetimi

·         Arkadaşlar konuyu anlatmaya başlamadan önce statik bellek,otomatik bellek ve dinamik bellek hakkında araştırma yapınız.Bunlar sözel kısımlar o yüzden buraya uzun uzun anlatmayacağım.
·         Direktmen Dinamik Bellek Yönetimi konusuna giriş yapacağım.
·         Bismillah diyerek başlayalım.
·         Şimdi size iki tane örnek sunacağım ve sizlerle dinamik bellek yönetiminin ne kadar önemli olduğunu anlayacaksınız.
·         1.örnek olarak 30 karakterlik bir metin dizisi tanımladığımızı düşünelim.Kullanıcıdan bir metin girilmesi istendiğinde kullanıcı 10 karakterlik bir metin girdi.Eee geri kalan 19 karakter ne olacak.Boşa alan kaybı.Bu arada NULL karakterini unutmayın.Peki kullanıcı ya 30’dan fazla karakter girerse?İşte o zaman da programımız hata verecektir.
·         Dinamik bellek yönetiminde kullanabileceğimiz 3 tane çok özel fonksiyonlar vardır.Bunlar : malloc,free,sizeof.
·         malloc() Fonksiyonu :
·         Bu fonksiyonun bizim bellekten ödünç alan almamızı sağlar ve bu alanın başlangıç adresini tutan bir işaretçi döndürür.
·         free() Fonksiyonu :
·         Bu fonksiyon malloc ile aldığımız ödünç alanı belleğe geri iade etmemizi sağlar.

·         Şimdi bir örneğimizle konuyu kavramaya çalışalım.


·         İşaretçi Değişkenlerinin Birbirine Atanması :
·         Arkadaşlar örnek üzerinde açıklama yapacağım.


·         Bellek Alanlarının Farklı İşaretçilerle Yönetilmesi :
·         Arkadaşlar örnek üzerinde açıklama yapacağım.


·         Tek Boyutlu Dizilerde Dinamik Bellek Yönetimi :
·         Arkadaşlar daha önce dizilerle işlem yaparken sabit eleman sayısı tanımladık.Şimdi eleman sayısını kullanıcıdan alarak bellekten kazanç sağlayacağız.
·         Şimdi örneğimizle konuyu kavramaya çalışalım.


·         İki Boyutlu Dizilerde Dinamik Bellek Yönetimi :
·         Arkadaşlar burada yapmamız gereken çok kolay bir şey var.Basit düşünmek!
·         Şimdi 2x3 lük bir matrisimiz var diye düşünelim.
·         Yapmamız gereken her satır için belirli tamsayı atamak.Yani 1.satır için 3 eleman atayacak kadar eleman istemek.
·         Aynısını 2.satır içinde yaparsak matrisimiz oluşur.
·         İşte programlamacı mantığı böyle olmalıdır arkadaşlar.

·         İşaretçilerin Bellek Adreslerini Tutan İşaretçiler :

·         Arkadaşlar bu konuyu örnek üzerinde açıklama yaparak anlatacağım.


·         İki Boyutlu Dizilerde Dinamik Bellek Yönetimi :
·         Bu konunun püf noktalarına bir önceki makalemde değinmiştim.
·         Şimdi sıra geldi bir örnek ile taçlandırmaya.


·         calloc() Fonksiyonu :
·         Bu fonksiyon malloc fonksiyonu ile aynı görevi yapar.malloc fonksiyonundan tek farkı ödünç olarak aldığımız bellek alanındaki değişkenlere 0 değerini atar.
·         realloc() Fonksiyonu :
·         Bu fonksiyon daha önceden ödünç aldığımız bellek alanını yeniden belirlememizi sağlar ve ayırdığı alanın başlangıç adresini döndürür.
·         Şimdi bu iki fonksiyonu bir örneğimizle kavramaya çalışalım.


·         string.h Kütüphanesi Bellek Yönetim Fonksiyonları :
·         memset() Fonksiyonu :
·         Bu fonksiyon malloc ve realloc ile ödünç aldığımız hafıza alanının tamamına 0 değerini atamamızı sağlayan bir fonksiyondur.
·         Bu fonksiyonun genel kullanış amacı ise hafıza alanını belirli bir bölümüne 0 değerini atamaktır.

·         Şimdi bir örneğimizle konuyu kavramaya çalışalım.


·         memcpy() Fonksiyonu :
·         Arkadaşlar bu fonksiyon strcpy fonksiyonu ile kısmen aynı görevi yapar.
·         Tek farkı parametre olarak kopyalanacak bellek alanını alır ve aktarımı yapar.
·         Böyle olmasının sebebi bu fonkiyonunun bütün bellek alanlarına uygulanabilmesidir.
·         Şimdi bir örnekle konuyu kavramaya çalışalım.
·         memmove() Fonksiyonu :
·         Bu fonksiyon memcpy fonksiyonu ile aynı görevi yapar.
·         Tek farkı çakışan bellek alanları olması durumunda bu fonksiyonun daha kullanışlı olmasıdır.
·         memcpy fonksiyonu çakışan alanlar üzerine uygulanırsa vereceği çıktı tahmin edilemez.
·         Şimdi bir örnekle konuyu kavramaya çalışalım.


·         Bellek Alanlarının Örtüşmesi Durumu :
·         Örnek üzerinden açıklamalar yaparak bu konuyu anlatacağım.


·         memchr() Fonksiyonu :
·         Arkadaşlar bu fonksiyon kendine parametre olarak gelen bellek alanında bizim belirttiğimiz kadar ilk n bayt içerisinde bir değeri aramamızı sağlar.
·         Eğer bellek alanında bu değer bulunamazsa NULL değeri döndürülür.
·         Eğer bellek alanında bu değer bulunursa değerin bulunduğu baytı gösteren bir işaretçi döndürür.
·         Şimdi bir örneğimizle konuyu kavramaya çalışalım.


·         memcmp() Fonksiyonu :
·         Bu fonksiyon bize parametre olarak gelen iki dizisinin ilk n baytlarını karşılaştırmamızı sağlar.
·         Eğer ilk n baytlar eşit ise 0 değeri döndürülür.
·         Eğer ilk dizinin[dizi1] ilk n baytı ikinci dizinin[dizi2] ilk n baytından küçükse değer olarak negatif bir değer döner.
·         Eğer ilk dizinin[dizi1] ilk n baytı ikinci dizinin[dizi2]ilk n baytından büyükse değer olarak pozitif bir değer döner.
·         Şimdi bir örneğimizle konuyu kavramaya çalışalım.

Hiç yorum yok:

Yorum Gönder