Bu yazımızda, bilgisayar dünyasının temel yapı taşı olan veri yapısı konusunu ele alacağız. Bu konu oldukça zor olmakla birlikte, gayet önemli ve eğlenceli yapıdır. Veri yapısını bilmek ve etkin kullanmak, hayatınızda yapacağınız projelerde size kolaylık sağlayacaktır. Veri yapısı genel olarak bakıldığınında hayatımızın her anında vardır. Konular ilerledikçe bu daha iyi anlaşılacaktır.
Veri yapısını tanımlamak gerekirse, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılır. Veri yapıları, verilerin düzenlenme biçimini belirleyen yapıtaşlarıdır. Bir yazılım değişkeni bile basit bir veri yapısı olarak kabul edilebilir. Değişik algoritmalarda verilerin diziler, listeler, yığıtlar, kuyruklar, ağaçlar ve çizgeler gibi veri modellerine uydurularak düzenlenmesi gerekebilir. Veri, yapı ve algoritma bir yazılımın birbirinden ayrılmaz bileşenleridir. Algoritması hazırlanmış her yapı için verilerin düzenli bir şekilde kullanımı önemlidir. Çünkü yapı iyi kurulduğunda, etkin, doğru, anlaşılır ve hızlı çalışıp az kaynak kullanan algoritma geliştirmek kolaylaşır.
Veri yapısı konusunu daha iyi işleyebilmek için, bellek yönetimini de iyi bilmemiz gerekir. Ondan da kısaca bahsedip, bu yazımızı noktalayacağım. Öyleyse başlayalım. :)
Statik Bellek Bölgesi, bu bölgede yer alacak değişkenler hangileri olduğu, daha program başlamadan bellidir. Bu bölgede: Global değişkenler, sabitler, static olarak tanımlanmış lokal değişkenler tutulurlar. Statik bellek bölgesinde tutulan değişkenler program çalıştığı sürece var olurlar, program sonlandığında bellekten silinirler.
Çalışma Alanı Yığını, En aktif bellek bölgesidir denilebilir. İsmini de oradan aldığı bu bellek bölgesi bir yığın(stack) şeklindedir ve bu yapıda çalışır. Bu yapıya ilk giren en son çıkar. Bir program çalıştığı sürece genişleyip daralan bitişik bir yapıya sahiptir. Bu bellek bölgesinde fonksiyon ve metot çağrımları ve bu fonksiyon ve metotların barındırdığı lokal değişkenler bulunur. Bir fonksiyon veya metot çağrıldığında bu fonksiyon veya metoda ait parametreler değişkenler ve dönüş değerleri bu bellek bölgesinde tutulur. Çalışma anı yığın bölgesi genişlemiş olur. Fonksiyon veya metot çağrılan yere döndüğünde bu fonksiyon veya metodun çalışma anı yığınında ayırmış olduğu yer geri döndürülür. Dolayısıyla geri döndürülen bu değişkenlere çağrım bittikten sonra erişim olamayacaktır.
Heap Bellek Bölgesi, Bu bellek bölgesi C ve C++ gibi programlama dillerinde dikkat edilmesi gereken çok önemli bir bölgedir. Çünkü C ve C++ gibi dillerde bu bölgenin kontrolü programcıya bırakılmıştır. Bu da demek oluyor ki eğer bu bölgenin kontrolü iyi sağlanmaz ise bellek taşması ya da yanlış değerlere erişim gibi problemler ile karşı karşıya kalınabilir. Bu bölgeye duyulan ihtiyacın nedeni, dinamik oluşturulan yapıların boyutları değişken olacak ve çalışma anında belirlenecektir. Dolayısıyla bu yapılar heap bellek bölgesinde tutulmalı, bu yapılara ve değişkenlere göstericiler yardımıyla erişilmelidir. Bu bellek bölgesinde tutulan bir değerin adı yoktur yani anonimdir ve ancak değerin bulunduğu adresi gösterecek bir gösterici yardımıyla erişilebilir. Heap bellek bölgesinde C++ programlama dilinde bir yer ayırmak için new operatörü kullanılır. new operatörü kullanan göstericinin tutulduğu yer çalışma anı yığınıdır. Gösterdiği adres ise heap bellek bölgesinde bulunur. new operatörü kullanmadan tanımlanan göstericiler heap bellek bölgesinden yer ayıramazlar. Bu bölgede ayrılan yer işi bittiğinde belleğe geri verilmelidir. Bu bölgenin kontrolü programcıda olduğu için eğer geri döndürülmez ise çöp dediğimiz durum oluşur. Hatırlanırsa bu bölgedeki adreslere çalışma anı yığınındaki göstericiler yardımıyla erişiliyordu. Dolayısıyla çalışma anı yığınındaki gösterici kaybedilmeden önce heap bellek bölgesinde ayrılan yer geri döndürülmelidir. Yoksa o bölge bilgisayar kapanıncaya kadar kullanılamaz duruma gelir.
Veri yapısını tanımlamak gerekirse, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılır. Veri yapıları, verilerin düzenlenme biçimini belirleyen yapıtaşlarıdır. Bir yazılım değişkeni bile basit bir veri yapısı olarak kabul edilebilir. Değişik algoritmalarda verilerin diziler, listeler, yığıtlar, kuyruklar, ağaçlar ve çizgeler gibi veri modellerine uydurularak düzenlenmesi gerekebilir. Veri, yapı ve algoritma bir yazılımın birbirinden ayrılmaz bileşenleridir. Algoritması hazırlanmış her yapı için verilerin düzenli bir şekilde kullanımı önemlidir. Çünkü yapı iyi kurulduğunda, etkin, doğru, anlaşılır ve hızlı çalışıp az kaynak kullanan algoritma geliştirmek kolaylaşır.
Veri yapısı konusunu daha iyi işleyebilmek için, bellek yönetimini de iyi bilmemiz gerekir. Ondan da kısaca bahsedip, bu yazımızı noktalayacağım. Öyleyse başlayalım. :)
Bellek Yönetimi
Bilgisayar üzerinde bir veri yapısını gerçekleştirebilmek için bilgisayar belleğinin kullanımına ihtiyaç vardır. Çalışan herhangi bir programdaki değişkenler, sınıflar, metotlar mutlaka bellekte bir yerde tutulurlar. Bellekte tutuldukları yerler bakımından 3 farklı bölge bulunmaktadır.
- Statik Bellek Bölgesi
- Çalışma Anı Yığını
- Heap Bellek Bölgesi
Statik Bellek Bölgesi, bu bölgede yer alacak değişkenler hangileri olduğu, daha program başlamadan bellidir. Bu bölgede: Global değişkenler, sabitler, static olarak tanımlanmış lokal değişkenler tutulurlar. Statik bellek bölgesinde tutulan değişkenler program çalıştığı sürece var olurlar, program sonlandığında bellekten silinirler.
Çalışma Alanı Yığını, En aktif bellek bölgesidir denilebilir. İsmini de oradan aldığı bu bellek bölgesi bir yığın(stack) şeklindedir ve bu yapıda çalışır. Bu yapıya ilk giren en son çıkar. Bir program çalıştığı sürece genişleyip daralan bitişik bir yapıya sahiptir. Bu bellek bölgesinde fonksiyon ve metot çağrımları ve bu fonksiyon ve metotların barındırdığı lokal değişkenler bulunur. Bir fonksiyon veya metot çağrıldığında bu fonksiyon veya metoda ait parametreler değişkenler ve dönüş değerleri bu bellek bölgesinde tutulur. Çalışma anı yığın bölgesi genişlemiş olur. Fonksiyon veya metot çağrılan yere döndüğünde bu fonksiyon veya metodun çalışma anı yığınında ayırmış olduğu yer geri döndürülür. Dolayısıyla geri döndürülen bu değişkenlere çağrım bittikten sonra erişim olamayacaktır.
Heap Bellek Bölgesi, Bu bellek bölgesi C ve C++ gibi programlama dillerinde dikkat edilmesi gereken çok önemli bir bölgedir. Çünkü C ve C++ gibi dillerde bu bölgenin kontrolü programcıya bırakılmıştır. Bu da demek oluyor ki eğer bu bölgenin kontrolü iyi sağlanmaz ise bellek taşması ya da yanlış değerlere erişim gibi problemler ile karşı karşıya kalınabilir. Bu bölgeye duyulan ihtiyacın nedeni, dinamik oluşturulan yapıların boyutları değişken olacak ve çalışma anında belirlenecektir. Dolayısıyla bu yapılar heap bellek bölgesinde tutulmalı, bu yapılara ve değişkenlere göstericiler yardımıyla erişilmelidir. Bu bellek bölgesinde tutulan bir değerin adı yoktur yani anonimdir ve ancak değerin bulunduğu adresi gösterecek bir gösterici yardımıyla erişilebilir. Heap bellek bölgesinde C++ programlama dilinde bir yer ayırmak için new operatörü kullanılır. new operatörü kullanan göstericinin tutulduğu yer çalışma anı yığınıdır. Gösterdiği adres ise heap bellek bölgesinde bulunur. new operatörü kullanmadan tanımlanan göstericiler heap bellek bölgesinden yer ayıramazlar. Bu bölgede ayrılan yer işi bittiğinde belleğe geri verilmelidir. Bu bölgenin kontrolü programcıda olduğu için eğer geri döndürülmez ise çöp dediğimiz durum oluşur. Hatırlanırsa bu bölgedeki adreslere çalışma anı yığınındaki göstericiler yardımıyla erişiliyordu. Dolayısıyla çalışma anı yığınındaki gösterici kaybedilmeden önce heap bellek bölgesinde ayrılan yer geri döndürülmelidir. Yoksa o bölge bilgisayar kapanıncaya kadar kullanılamaz duruma gelir.
Yorumlar
Yorum Gönder