Stack & Heap Nedir ?



Stack ve Heap RAM'in mantıksal bölümleridir. Stack'de value type pointer ve adreslerde saklanırken, Heap'de reference type saklanır.

Stack erişimi Heap'e göre daha hızlıdır. Stack'ler LIFO mantığı ile çalışır. Yani son gelen ilk olarak çıkar ve bu nedenden dolayı aradan herhangi bir eleman çıkaramayız.

Integer, bool, byte gibi value type değişkenler Stack'de tutulur. String, array gibi reference type değişkenler ise Heap'de tutulur. Bu tip değişkenlerin referansları stack'de kendisi ise heap'de tutulur.


 
Görsele baktığımız da int tipinde tanımlanan değişken direk stack üzerinde "000001" adresinde saklanmaktadır. String bir referans tipi olduğundan dolayı Stack üzerinde "00000H" adresinde HEAP üzerindeki "FFF0GH" alarak referans adresi olarak tutulmuştur.

Value type bir değişkeni kullandıktan sonra otomatik olarak bellekten temizlenir ama reference type bir değişken kullandığımız zaman bunun temizlenmesi için Garbage Collector kullanılması lazımdır. 

Bir method'a ref anahtar kelimesi ile value type yollanırsa değişken içeriği heap bölgesine taşınır ve stack'de heap adresi tutulur.
 

Yorumlar