Herkesin dilinde Stack&Heap

Yunus
SDTR
Published in
2 min readFeb 12, 2022

Selamlar,

İlk yazım olması sebebiyle biraz heyecanlıyım. Umarım anlatış biçimini beğenirsiniz. Herkesin anlayabileceği şekilde anlatmaya özen gösteriyorum. Öğrenip araştırdıklarımı ilk kez insanlara aktarmayı deneyeceğim.

İyi okumalar…

Öncelikle ram’in iki kısmı vardır: Heap ve Stack. Bu ayrımın amacı biri hızlı ve sabit değişkenleri tutmak diğeri ise daha kompleks ve boyutu Stack’teki verilere göre fazla olanları tutmaktır(ayırmaktır).

Stack Nedir?

Stack için boyutu az ve sabit değişkenler diyebiliriz örnek olarak int, double, float, long, byte gibi değişken tiplerini verebiliriz bunlar Değer Tip(primative) olarak geçer. Stack Heap’e göre daha hızlıdır. Stackte veriler üst üste (LIFOLast in Firstout) mantığında dizilir ve sırası gelmeden aradaki bir değer ile işlem yapılamaz.

Heap Nedir?

Heap için boyutu daha fazla ve direkt sabit olmayan üzerinde olası değişiklik yapılabilecek veriler denilebilir. örnek olarak bir listeniz olduğunu varsayalım ve bu listede 10 tane ürününüz var, boyut olarak Değer Tiplere göre daha fazla ama burdaki asıl önemli nokta bu liste içerisindeki ürünlerde değişiklik olabilir ve bu veriler Heapte Tutulurlar ama neden? nedenini Referans Tiplerde anlatacağım.

Değer Tipler(Primative Tipler);

Bu tipler direkt olarak veriyi tutabilirler yani
int a=5;
burada a değişkeni direkt 5 olur ve hemen erişebiliriz.

Referans Tipler;

Burda işler değişiyor çünkü veriyi Referans Tipler tutmaz. Refernas Tip Verinin Heap’te bulunan konumunu ve verinin değerlerini işaret eder bir değişiklik yapınca da bu değişikliği direkt Heap’te bulunan veriye işler .

Kısaca özetlemek gerekirse;

Değer Tipler sabit ve ramde çok yer kaplamayan verileri tutarlar.

Refernas Tipler kompleks verileri ve verinin ramdeki konumunu tutar.

Stack ve Heap Farkları:

Heap’de veriler düzensiz ve bir sırası yoktur.

Stack’te ise Azalan, Artan ya da First In First Out şeklindedir.

Heap’de tutulan verilere ulaşmak Stack’teki verilere ulaşmaktan daha yavaştır.

Bir diğer fark ise Stack’te bulunan değerleri direkt silebiliyorken, Heapte bu iş için Garbage Collector kullanmanız gerekiyor Modern dillerde bu işlem otomatik yapılmaktadır fakat bazı dillerde bunu sizin kendiniz yapmanız gerekiyor. Kullanacağınız yerin boyutunu tam olarak biliyorsanız Stack, ihtiyacınız olan boyutu tam olarak bilmiyorsanız Heap kullanımı daha mantıklı bir tercih olacaktır.

Eğer yanlış olduğunu düşündüğünüz bir bilgi varsa lütfen bildirin. Okuduğunuz için teşekkür ederim. Bir sonraki yazıda görüşmek üzere…

--

--