# Stack ve Heap Çalışma Mantığı Nedir?

**Stack ve Heap** kavramları özet olarak RAM'in mantıksal bölümleridir. Ve .Net Frame Work tarafından otomatik olarak yönetilir. Yine özet olarak;

&#x20;**Stac'da** int , short , byte , long , decimal , double , float gibi değer tipler ve referans tiplerin adresleri,

&#x20;**Heap'te** ise referans tipler tutulmaktadır.

Heap alanına, stack üzerinde tutulan adresler ile ulaşılmaktadır.&#x20;

![](https://2510487821-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MO29WVIoUuc3uBPrU4f%2F-MR9zd2kY1qn77EAeI-g%2F-MR9ziYNQxf3St2VjgT0%2Fimage.png?alt=media\&token=e2e939b6-6078-4e15-8e05-391d19d82e3d)

Yukarıda görüldüğü gibi int sayısı değer tip olduğu için Stack alanında 00001 adresinde tutulmuştur. "String isim" ise referans tip olduğu için stack üzerinde OOOOH adresinde ve  FFOGH referans adresi ile tutulmuştur. Yani ali ismine ulaşmak için önce stackteki 0000H adresine gidilecek oradaki FFOGH referansı alınarak heapdeki FFOGH referansına ulaşılacak ve ordan "isim=ali"' ye ulaşılacaktır. Bu işlem heap alanındaki bilgilere ulaşılmayı güçleştirirken bir yandanda kolaylaştırmakta çünkü heapteki bütün bilgiler kontrol edilmeden direk referans adresine gidilmektedir.

* Stack alanı LIFO mantığı ile çalışır
* Stack alan tanımlanan varlıklar boş geçilemez. Bunun önüne nullable ile geilebilir?
* Stack alanında değer tip, pointer ve adresler saklanırken, Heap'te referans tipler saklanır.
* Stack daha hızlıdır ulaşılmak istenilen veriler ard arda(big and little endian artan yada azalan mantığı) sıralanmıştır.
* Heap'te veriler dağınık olarak tutulur. Ortak olarak kullanılır ve uygulama başladığında başlar.
* Heap'in bir sınırı yoktur. Büyük bir saklama alanına ihtiyaç varsa heap kullanılmalıdır.

Reference: guru99.com
