İçeriğe geç

.Net de Stack ve Heap Kullanımı

.Net ortamında uygulama geliştirip derlediğimiz zaman arka tarafta bir çok işlem olmaktadır. Oluşan bu işlem sırasında kodlarımızın derlenip RAM üzerinde tutulan Type larımızın çalışması ile birlikte uygulamamız ayağa kalkmaktadır. Peki bu RAM üzerinde tutulan Type larımız nasıl tutuluyor, ne kadar süre tutuluyor tarzında sorularınızı duyar gibiyim.
Bildiğiniz gibi RAM, Stack ve Heap dediğimiz iki alandan oluşuyor. Bu her iki teriminde türkçe karşılığı “yığın” olarak çevrilsede kendi içlerinde farklı görevler üstlenmektedirler. .Net’ de metotları çalıştırdığımızda veya var olan metodlar üzerinde değişiklik yaptığımızda, stack dediğimiz alanda meydana gelmektedir. Bu işlemi sırasıyla yaparak, her biten işlemi üste atarak sırasıyla alttaki kutulara doğru çalışmaya devam eder. Stack üzerinde düzinelerce işler olabilir. Stack’te statik bilgiler tutulur. Stack te yapılan işlemler sonlanır. Stack içinde LIFO (Last in First Out) mantğıyla çalışır. Heap te ise stack ten farklı olarak yapılan işlemlerden ziyade bilgi tutmak amaçlı çalışmaktadır. Heap’te yapılan işlemler otomatikmen sonlanmaz. .Net de Heap için yapılacak olan Garbage Colletor ile temizleme işlemi yapılabilir., Heap alanında dinamik veriler tutulur.

Resimde de görüldüğü gibi Stack içinde veriler sıralı olduğu için, Heap’ e göre verilere daha hızlı ulaşılabildiğinden stack için daha performanslıdır diyebiliriz. Çünkü Heap içerisinde Type lar dağınık bir şekilde bulunmaktadır.
.Net ortamında da bu şekilde bir işlem söz konusudur. Yazdığınız bir metod, stack üzerinde çalıştıktan sonra tekrardan kullanılmama gibi bir durum söz konusu ise çalışan metod stack ten çıkar. Eğer bir class tanımlayıp onun içinde bir int,string, double veya decimal tarzında bir type tanımladığınızda bu stack üzerinden tutulur. Fakat tanımlanan class heap üzerinden tutulduğu için ve class ın içinde tanımladığımız value typelarda bu alanda adreslenmektedir. Şimdi Stack ve Heap üzerinde tutulan Value Type ve Reference Type ı inceleyelim.

Reference Type: Class, Interface ve Delegate oluşur. Bunun yanında Dynamic, object, string (String den türetilmiştir.) 2 değişkeni tek bir objeden adresleyebiliriz.

Value Type: Numerik değişkenler, Boolean, Char, Date, Struct(Reference Type içinde olsa bile). Burdaki tüm değişkenler kendilerine ait adreslerde tutulurlar.

Çalışan metodumuz ilk olarak stack üzerinde

Heap Üzerinde

.Net de bir metodun temel düzelyde stack ve heap üzerinde çalışma şekli yukardaki gibidir. Metodumuz çalışıp bittikten sonra herhangi bir işi kalmadığı için stack üzerinden silinecektir. Heap üzerindeki değişkenimiz ise .net tarafından çalıştırılına Garbage Collector sayesinde temizlenmiş olacaktır.

NOT: Main() metodu da bir metot olduğundan Stack üzerinde çalışır.

Tarih:.NET

İlk Yorumu Siz Yapın

Bir cevap yazın

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