BilgiYazan Blog | Stack ve Heap Kavramı
Bu iki veri tipi belleğin stack ve heap adlı bölgelerini kullanır. Değer tipleri (int, short, byte, long, decimal, double, float ) Stack’te tutulurken referans tipleri Heap bölgesinde tutulur. Stack Heap’e göre daha hızlıdır.
Programımızın içerisindeki basit bir tamsayı türünden nesnenin çalışma zamanında yüklendiği yer RAM’in Stack dediğimiz bölgesidir. Mikroişlemciler yardımı ile veri çekilir ya da yazılır.
Heap’te stack bölgesi gibi RAM’deki hafıza alanıdır. Nesnelerin hepsi Heap’te bulunur ve veriler çalışma zamanında dinamik olarak yaratılırlar yani derleme aşamasında yer tahsis işlemi yapılmaz. Referans tipli değişkenlerin saklandıkları ve değişkene adres bilgisinin gönderildiği yerlerdir.
Stack bellekten statik olarak yer tahsisi için kullanılırken, Heap dinamik olarak yer tahsisi içindir. Her ikisi de Ram bölgesinde bulunur.
Stack’te yer alan veriler direk bellek içine yerleştirilir dolayısıyla erişimi çok hızlıdır ve programın derleme aşamasında belleğe yerleşirler. Heap ise runtime(çalışma zamanında) anında kullanılırlar ve dağınık bir bellek göz yapısı olduğu için erişimi stack kadar kolay olmaz dolayısıyla yavaş çalışır. Program esnasında boyutları bildirilmiş, değişmez bir değer kullanacaksak ve buda çok büyük bir veri değilse stack, boyutu belli olmayan bir değer kullanıyorsak (ki nesne yönelimli programlama da bunlara obje denir) o zaman derleyici otomatik olarak Heap’ten yer tahsisi yapar. Stack bellekteki veri hemen silinirken Heap bellekteki verinin silinmesi Garbage Collector’a (Çöp toplama mekanizmasına) bağlıdır. Stack alanı sınırlı olduğundan çok büyük sayıda ve büyük tiplerde veri atanması belleğin dolmasına sebep olabilir.
Değer tipi (Valu Types) tipinden bir değişken tanımladığımızda, daha derleme aşamasında stack bellekten int tipinin bellekte tuttuğu yer kadar (4 byte) yer tahsis edilir ve değişkene değer atanmışsa ilk atanan değer yerleştirilir. Sonra bu değer değişse bile, bu değişkene 4 byte’lık (2^32 bit)’lik bir sayı yerleştirebileceğimiz için çok büyük sayıları bile atayabileceğimiz bir yer tahsis etmiş oluruz. Aşağıdaki örneğe bakacak olursak int tipinden “a” değişkeni tanımlayıp içine 5 sayısını atarsak, stack’te bu değişken için bir yer tahsisi yaptırmış oluruz ve yine int tipinden başka bir değişken tanımlanıp (b) değerini “a” değerine eşitlersek, stack’te bir 4 byte daha yer tahsis yapacak ve a’nın içeriğini kopyalayıp b’ye yazacaktır. Böylece toplam 8 byte’lık yer ayırmış oluruz. Person tipinde p1 adında bir nesne tanımlarsak bu sefer Heap bellekte yer tahsisi yapılacaktır. P2 adında yeni bir personel tanımlanıp p1’e atanırsa bu sefer heap’te bulunan nesne ortak nesne olacaktır.
Yazar: Salih TAZE