Stack Vs Heap
Bu makalede sizlere Stack ve Heap’in ne olduğunu ve farklarını C++ örnekleriyle açıklayacağım ayrıca programımızın kullandığı diğer bellek kısımlarına da değineceğim.
İlk olarak programımız başlatıldığında programa verilen bellek(RAM), segment adındaki farklı alanlara ayrılır, Stack ve Heap de bu alanlar arasından en önemli olanları, elbette bu alanlar Stack ve heap ile kalmıyor, Stack ve Heap dışındaki alanları basitçe özet geçelim:
Heap segmenti (“free store” olarak da bilinir) boyutu büyük veya belli olmayan verileri saklamak için kullanılan segment’dir (Büyük boyutlu arrayler, objeler…) çünkü Heap segmenti, Stack segmentinin aksine belirli bir boyutu yoktur yani boyutu genişleyebilir, değişebilir. ayrıca sakladığımız verinin yaşam süresini kontrol etmek istediğimiz zamanlarda kullanırız.
Heap de Stack’ın aksine ayırdığınız yer manuel olarak boşaltılması yani silinmesi gerek aksi taktirde memory leak durumu oluşur, memory leak‘i bir kiracının evinizde kalıp eşyalarını bırakıp gitmesi gibi düşünebilirsiniz, bu örnekte ev: bellek, eşya: veri.
Stack segmenti verileri düzenlemek için ismini de aldığı Stack adındaki veri yapısını kullanır , bu yüzden Stack segmentini anlamadan ve öğrenmeden önce bu veri yapısını anlamak ve öğrenmek gerek.
Stack veri yapısı isminden de anlaşılacağı üzere (ENG stack -> TR yığın) yığın halinde kullanılır
Stack veri yapısını üst üste yığılmış kitaplar örneği ile düşünebilirsiniz sonuçta kitap yığınında istediğiniz bir kitabı düzgünce almak istiyorsanız o kitapın üstündeki kitapları da indirmeniz gerekir aynı stack veri yapısındaki gibi
Stack segmenti (“Call stack” da denir) programdaki aktif fonksiyonların Stack frame‘lerini üst üste yığın halinde saklar, fonksiyon bitince de o fonksiyonun Stack frame‘i Stack segmentinden çıkarılır (pop), Stack frame‘i Fonksiyonun parametrelerinin ve local(yerel) değişkenlerinin tümünü içerir.
örneğimize dönecek olursak Stack segmentini yığın halindeki Kitapların tümü olarak, Stack frame‘ini kitap olarak, Kitapın içindeki sayfaları da Fonksiyonun parametreleri, local değişkenleri…şeklinde düşünebiliriz.
Stack segmentinin kullanım boyutu aktif fonksiyonların(çağrılmış ve bitirilmemiş) sayısı arttıkça büyür ayrıca Stack segmentinin alanı Heap segmentin’e kıyasla farklı şekilde otomatik olarak CPU tarafından verimli bir şekilde yönetilir.
İlk duyuşunuzda aklınıza https://www.stackoverflow.com sitesi gelmiş olabilir ki sitenin ismi zaten buradan geliyor.
Stack’ın Heap’den bir farkı da önceden belirlenmiş bir boyutu olmasıdır, yani belirli miktarda veriyi tutabilir. Bu boyut windows’ta default olarak 1mb’dır, fakat bazı Unix sistemlerinde bu boyut 8mb’a kadar çıkabilir.
Eğer program Stack’a bu boyutun kaldırabileceğinden fazla veri koymaya çalışırsa Stackoverflow durumuyla karşılaşınır, bunu deneyebileceğiniz bir örnek kodla gösterelim, bu kodu çalıştırdığınız zaman programın çökmesi gerekmekte verilen Stack boyutunu aştığımız için
int main()
{
int stack[10000000];
}int main()
{ // Stack da main için bir frame push'landı
int stackArr[10];// main'in Stack Frame'sinde 10x4 byte lık bir alan ayırttık
} // main'in stack frame'si fonksiyon scope dışına çıktığından dolayı silindi (pop)int main()
{
int* stackArr = new int[10];// Heap de 10x4 bytelık bir alan ayırttık
// Ayrıc heap de oluşturduğumuz alana erişebilmek için de Stack da bir pointer oluşturduk
} // Heap de oluşturduğumuz alan silinmedi manuel olarak silmek için C++ da delete keywordunu kullanmalıyızBoyutunun belli ve nispeten küçük olduğu verileri stack da, Boyutunun belli olmadığı ve nispeten büyük olduğu verileri de heap de saklamaya özen gösterin.
Umarım size bugün bir şeyler katabilmişimdir. bu benim ilk yazım ve okuyup zaman ayıran herkese teşekkür ederim 😊
Günümüzde, dünya genelinde su kaynakları giderek azalıyor ve su krizi giderek artan bir endişe kaynağı…
Web kameraları, günümüzde hemen hemen her bilgisayarın ayrılmaz bir parçası haline gelmiştir. Uzaktan çalışma, eğitim…
Günümüzde teknolojinin ilerlemesiyle birlikte evlerimizde bulunan birçok cihaz internete bağlanabilmekte ve bu durum hayatımızı kolaylaştıran…
Günümüzün dijital çağında, hemen hemen her sektörde yazılımın rolü büyük bir önem taşımaktadır. Peki, yazılım…
Günümüzde, çevre sorunları ve sürdürülebilirlik, küresel ölçekte giderek artan bir önem kazanmaktadır. Yeşil teknoloji, bu…
Geleceğin ulaşım teknolojileri, sadece daha hızlı ve daha verimli taşımacılık sağlamakla kalmıyor, aynı zamanda çevre…
This website uses cookies.
View Comments
Ellerine Sağlık Bir Kaç Yazı Daha Bekliyoruz :hrr:
İnşallah başka yazılarım da gelecek
recep ivedik onaylı epik yazı 👍
Çok bilgilendirici ve güzel bir yazı olmuş.
Fikriniz için çok teşekkür ederim :-)
Güzel yazmışın PyroSoft++ =)
Güzeeel