Uzun bi aradan sonra makalelerimize kaldığımız yerdend evam ediyoruz. Programlamanın temellerinden olan C++ üzerine başlattığımız makalelere, 14. bölüm olan "Dinamik Bellek Yönetimi" ile devam ediyoruz.
Dinamik Bellek Yönetimi
Programlar çalışmaları esnasında boyutlarına bağlı olarak bellekte bir yer tutarlar. Bazı uygulamalarda bellekte yer sorunu yaşanabilir. Böyle durumlarda belleğin etkin biçimde yönetilmesi söz konusu olacaktır.
Standart C ’de bellek yönetimi amacıyla iki fonksiyondan yararlanılır. Bunlardan birincisi malloc( ), diğeri ise free( ) fonksiyonudur. Bellekte bir yer ayırma söz konusu ise malloc( ); ayrılan yerin iptal edilmesi gerektiğinde ise free( ) fonksiyonu kullanılır. C++ ‘da ise bu iki fonksiyonun kullanılabilmesi mümkün olmasına karşılık, belleği dinamik biçimde yönetmek üzere, onların yerine New ve delete işleçleri kullanılır. C++ ‘da bellekte yer ayırmak için new, ayrılan yeri iptal etmek için delete işleci kullanılır.
Bellekte Yer Ayırmak
Bellekte dinamik olarak yer ayırmak gerektiğinde new işlecine başvurulur. Bu işleci şu şekilde kullanıyoruz :
gösterge = new tür;
Tanımdan görüldüğü gibi new işlecini bir tür tanımı takip etmektedir. Tür, bellekte yer ayrılacak nesnenin türüdür. Bu işleç, türü belli olan nesneyi taşıyacak kadar genişliği olan, dinamik olarak ayrılmış belleğe bir gösterge döndürür.
Bellekte yer ayırma işleci olan new, belirtilen nesnenin türüne göre bellekte yeterli yer ayırır. O nedenle ne kadar yer gerekli olduğunu anlamak için sizeof deyimini kullanmaya gerek yoktur. C ‘de malloc( ) kullanılırken böyle bir yol izleniyordu. Dinamik olarak ayrılan bir nesneye başlangıç değeri atamak söz konusu ise ,
gösterge = new tür (baslangic deger) ;
biçiminde bir tanım yapılır.
Örnek :Bir tamsayı için bellekte yer ayırmak istiyoruz. Bunun için aşağıda belirtilen kodlar yazılabilir :
int *g ; g = new int;
Diziler İçin Yer Ayırma
Nesne çok sayıda elemandan ibaret ise, yani bir dizi söz konusu ise,
gösterge = new tür [elemanlar]
biçiminde bir tanım yapılır.
Örnek :Aşağıda belirtildiği biçimde bellekte yer ayırdığımızı varsayalım.
int *g ; g = new int [5] ;
Birinci satır, türü belli olan bir elemanın belleğe yerleştirileceğini belirtmektedir. İkinci satır ise, 5 elemanlı bir dizinin bu belleğe atanmasını sağlar. Bu durumda, Program çalıştırıldığında bilgisayarınızın işletim sistemi bellekte türü int olan 5 elemanlık bir yer ayırır ve g olarak atanmış olan göstergenin başlangıcına gösterge döndürür. Bu durumda, g beş tamsayı eleman için geçerli bellek bloklarının başlangıcını gösterecektir.
Yer Ayırma Hatası
Dinamik bellek yönetimi işletim sistemi aracılığıyla gerçekleşir. Çok görevli (multitask) işletim sistemlerinde aynı anda çok sayıda farklı program çalışabilmektedir. Böyle olunca, bellek üzerinde ayrılacak alanlarla ilgili olarak problemler çıkabilir. Bu durumları denetlemek üzere C++ programında bazı kodlar yazılmalıdır. Aşağıda if deyimi ile denetleme işi yapıyoruz :
int *g ; g = new int ; if( !g ) { cout<<”Bellekte yer ayırma hatası var..”<<endl; return 1 ; }
Belleği Serbest Bırakmak
Bellekte dinamik olarak new işleci ile ayrılan yeri iptal etmek veya bir başka deyişle serbest bırakmak için delete işleci kullanılır. Bu işleç, bellekte ayrılan bir alanı iptal etmek için,
delete gösterge;
biçiminde tanımlanır. Eğer bir dizi için ayrılan bellek alanının serbest bırakılması söz konusu ise,
delete [ ] gösterge ; biçiminde kullanılır.
Faruk Alkaya Selçuk Üniversitesi - Teknik Eğitim Fakültesi
|
c++ Yazar Okuyucu açık 2006-12-07 13:25:43 Teşekkürler, elinizde tavsiye edibileceğiniz türkçe c++ ve java kaynağı var mı ?
Bu mail adresi spam botlara karşı korumalıdır, görebilmek için Javascript açık olmalıdır
adresine atarsanız sevinirim |
Powered by AkoComment 2.0! |