Stack ve Heap Nedir?





Verimli kodlama yapabilmek için yazdığımız kodlar çalıştığı esnada arka planda neler olduğunu bilmemiz gerekmektedir. Yazdığımız kodların hepsi RAM da yer kaplamaktadır.Performansın önemi ufak programlarda çok hissedilmese de profesyonel çalışmalarda hayati bir yer tutmaktadır.

Değerlerin RAM de saklandığı 2 kısım vardır : Stack ve Heap.İki kelime de Türkçeye 'yığın' olarak çevrilse de aralarında çok önemli farklar bulunmaktadır. Kısaca;
Stack, boyutları belli sabit değerlerin saklandığı kısımdır,
Heap, değişken değerlerin saklandığı kısımdır.

İşlevsel olarak;
Stack, istif bellek olarak adlandırılır.
Heap, dinamik bellek olarak adlandırılır.

Ufak bir örnek vermek gerekirse;

            int a = 5;
            int c = a;  //  a'da ki değerler bit bit c'ye aktarıldı.
            int b;       //Değerler RAM' da bu şekilde yer kaplar.


b ye atama yapılmadığı için heap ‘ta null değerini almıştır.Stack ta ise b ye aiet olan adres yer almaktadır. Herhangi bir atama olduğunda b stack’a geçer.

Stack'ta veriler binary şeklinde tutulur. Verinin yerleştiği en küçük birim 'Bit' tir (1 yada 0 yerleşir).

Değişkenler iki tip veri tutar : Value Type (Değer Tipli) ve Reference Type (Referans Tipli) .











Performansta ValueType daha avantajlıdır. Örneğin, atanmış bir 'c' değerini göster demek tek hamlede hallediliyorken Reference Type'de atamanın RAM' da ki adresi bulunuyor, heaptan adres çekiliyor ve getiriliyor. Yani 3 hamle sürüyor.Lakin, büyük çaplı bilgilerde Adreslerle, referanslarla çalışmak daha avantajlıdır.
Stack'ta ki değer derleme zamanında oluşturulur, kullanılır ve program sonlandıktan sonra kendini otomatik olarak yok eder. Heap'ta ise bu iş manuel olarak yapılmalıdır.Heap doğru kullanılmazsa bellek sorunu oluşur







Yorumlar

Bu blogdaki popüler yayınlar

CTS Nedir? (Common Type System)