Aybars Arslan

Console.WriteLine("Hello World");

Heap ve Stack in .NET

Merhaba arkadaşlar, bu yazımızda Ram’in mantıksal bölümleri olan Heap ve Stackten bahsedeğim 

Öncelikle bir değişken tanımladığımızda .NET uygulamamızda neler olduğunu düşünecek olursak. Her programcının bileceği gibi değişkenler RAM de tutuluyor. Peki değişkenler nelere sahip ? isim, değer ve veri tipi. Değişekenlerimiz tipine göre RAM’in yerleşim yeri olan Stack veya Heap hafızaya atılıyor ve bu alanlarda tutuluyor..

Şimdi Stack ve Heap hafızalarını kod üzerinde inceleyelim 🙂

static void Main(string[] args)
{
        int num1 = 7; 
        int num2 = 16; 
        Bike bikeObj = new Bike();
 }

Yukarıdaki kodu çalışma anlarını analiz ettiğimizde;
Line1 : Satır çalıştığında compiler Ram’in stack bölümünden ihtiyaç olunduğunda kullanmak üzerine küçük bir alan tutar.
Line3 : Satır çalıştığında değişken stack’e yerleştirilir.
NOT : STACK -> LIFO (Last In First Out) mantığıyla çalışır.
Line5 : Bu satırda bir nesne tanımladığımızı görebiliriz. Bu nesnenin hafızada tutacağı alan ve yerleşeceği yer biraz farklıdır. Bu tip oluşturulan referans type değişkenler stackte bir alan(işaretci) tutar. Bu tutalan işaretci Ram’in HEAP alanında bulunan gerçek değişkeni(nesneyi) işaret eder. Değiken(nesne) dinamik olarak heap bölümünde tutulur.

Şekilde ayrıntılı olarak anlatılanları görebiliriz.
heap-stack-1

Stackte -> Value Type değerler tutulur : Boolean, Numeric(int, float, double), Char, .NET primitive data types
Heapte -> Reeferans Type değerler tutulur : String ve Object

Peki bu value type ve referans type ne diye soracak olursakta;

Value Type -> Şekilde görüldüğü gibi değişkenin kayıt edildiği alanda verisi de tutuluyorsa Value Type.
Referans Type -> Pointer ile verinin bulunduğu adres işaret ediliyorsa Refarans Type. Stack hafıza bulunan işaretci ile Heap de bulunan nesne işaret (referans) edilir.

Paylaş !

, , , ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir