Stack Vs Heap Bellek
Bilgisayar üzerinde gerçekleştirilen işlemler, aslında arka planda bir işlemci üzerinde yapılan aritmetik/lojik işlemler bütünü. Bu işlemci üzerinde koşan yazılımlar sayesinde kullanıcı bilgisayar donanımından soyutlanır. Yazılım üzerinde yapılan işlemler için kayıt elemanı olarak hafızalar kullanılır. Stack ve heap kavramları yazılımlar için önemli iki hafıza bölümüdür. Bu bölümde bu kavramları daha detaylı incelemeye çalışalım.
Yazılım yaparken oluşturulan yapıların her biri bellekte yer kaplar. Bazı durumlarda bu uzunluklar gerekli tür yapıları için sabit bir değerdedir. Bunlara statik veri ismi verilir. Bazıları için ise kesin bir uzunluk değeri bulunmaz. Bu yapılar, kod içerisinde tekrardan genişletilebilir ve ya düşürülebilir. Bunlara ise dinamik veri ismi verilir. İki farklı bellek yapılandırması için statik bellek tahsisi ve dinamik bellek tahsisi ismi verilir.
Stack
Yazılımda tanımlanan yerel değişkenleri, oluşturulan değişlenlerin pointer ve adres değerlerini, fonksiyon parametre geçişlerini ve fonksiyonların içinde oluşturulan değişkenleri tutan hafıza bölümüdür. LIFO mantığında çalışır. LIFO’nun açılımı “Last In First Out” ve Türkçe’ye “Son Giren İlk Çıkar” olarak çevrilebilir.
Stack bellek statik alan tahsisi mantığını kullanır. Yazılım içerisinde kullanılacak olan statik yapıların bellekteki uzunlukları, programın “Compile” adımında hesaplanır. “Run-time” anında herhangi bir değişikliğe izin verilmez.
İki temel işleve sahiptir. Bunlar “push” ve “pop”. “Push” işlemi belleğe veri yazarken “pop” işlemi stack belleğin en üstünde bulunan veriyi kaldırmak için kullanılır. Bu yapıyı üst üste dizilmiş kitaplar olarak düşünebilirsiniz.
Heap
Yukarıda bahsi geçen dinamik verilerin tutulduğu bellek yapısı. Belleğe veri yerleştirmesi ve erişimi dağınık bir düzende yapılır. Uzunluğu belli olmayan ve ya programın “Run-time” anında bellek boyutunda kapladığı alanın değiştirilmesi gereken veriler tutulur.
Farkları
- Veri erişim hızı Stack belleklerde Heap belleklere kıyasla göreceli olarak daha hızlı.
- Heap belleklerde boyut sınırı bulunmaz.
- Stack bellek yönetimi daha kolaydır. Çünkü program kendi içerisinde otomatik şekilde yerleştirme ve silme işlemlerini yerine getirir. Heap belleklerde bu işlemler için yazılımcı sorumludur. Bellekte oluşturulan her yapının takibini yapmalı ve işlemini tamamladıktan sonra ilgili alanı serbest bırakmalı. Yoksa “memory leakage” ismi verilen “bellek sızıntısı” oluşur.
- Heap bellekte oluşturulan verilere programın herhangi bir yerinden erişilebilir. Ancak stack verileri yerel değişkenler ve sadece o an içerisinde bulunduğu segment tarafından erişilebilir.
-
KAYNAKÇA
- technopedia.com
- geeksforgeeks.com