Bellek Yerleşimi: Stack ve Heap Bellek Alanları Arasındaki Fark

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Stack vs. Heap: Bellek Yönetiminin İki Yüzü​


Bellek yerleşimi, verinin ne kadar süre yaşayacağını (lifetime) ve ona ne kadar hızlı erişebileceğinizi belirler. Stack otomatik ve düzenliyken, Heap esnek ama manuel yönetim gerektirir.



1. Stack (Yığın) Bellek​


Stack, LIFO (Last In, First Out - Son Giren İlk Çıkar) prensibiyle çalışan bir bellek bölgesidir. Bir fonksiyon çağrıldığında, o fonksiyona ait yerel değişkenler Stack üzerine "itilir" (push). Fonksiyon bittiğinde ise bu veriler otomatik olarak "çıkarılır" (pop).

Yönetim: Tamamen CPU tarafından otomatik olarak yapılır.

Hız: Çok hızlıdır; çünkü bellek tahsisi sadece bir işaretçinin (Stack Pointer) kaydırılmasından ibarettir.

Boyut: Sınırlıdır (Genelde birkaç MB). Çok derin özyinelemeli (recursive) fonksiyonlarda Stack Overflow hatasına neden olabilir.



2. Heap (Öbek) Bellek​


Heap, programın çalışma zamanında (runtime) dinamik olarak yer ayırabildiği geniş bir boş alandır. Burada ayrılan bellek, siz manuel olarak serbest bırakana kadar (veya program kapanana kadar) orada kalır.

Yönetim: Geliştirici tarafından manuel yapılır (new/delete veya malloc/free).

Hız: Stack'e göre yavaştır; çünkü işletim sistemi uygun boş bir blok aramak zorundadır.

Boyut: Sistemdeki mevcut RAM miktarı kadar büyüyebilir.

Risk: Bellek sızıntıları (Memory Leak) ve parçalanma (Fragmentation) riski taşır.



3. Temel Farklar Karşılaştırma Tablosu​


ÖzellikStackHeap
Veri BoyutuSabit (Derleme zamanında bilinmeli).Dinamik (Çalışma zamanında değişebilir).
Erişim HızıÇok Hızlı.Daha Yavaş.
Yaşam SüresiFonksiyon bitince sona erer.Manuel silinene kadar devam eder.
YerleşimSıralı ve bitişik.Dağınık (Rastgele boşluklar).



4. Hangisini Ne Zaman Kullanmalı?​



  • []Eğer değişkeninizin boyutu küçükse ve sadece bulunduğu fonksiyon içinde kullanılacaksa (örneğin döngü sayaçları, geçici hesaplamalar), Stack her zaman ilk tercihtir.
    []Eğer çok büyük bir dizi (örneğin 1 milyon elemanlı bir liste) oluşturacaksanız veya oluşturduğunuz nesnenin fonksiyon bittikten sonra da yaşamasını istiyorsanız (nesne yönelimli programlama), Heap kullanmalısınız.

C++:
void Ornek() {
int a = 10;            // Stack üzerinde yer alır (Otomatik silinir)
int* b = new int[100]; // Pointer Stack'te, dizi Heap'tedir (Manuel silinmeli)

delete[] b;            // Heap belleği iade edildi

}



Sonuç​


Stack hız ve güvenlik sağlar; Heap ise esneklik ve geniş kapasite. Modern dillerde bu ayrım genellikle arka planda halledilse de, C ve C++ gibi dillerde bu yönetimi bilmek, uygulamanızın neden çöktüğünü (Crash) veya neden çok yavaş çalıştığını anlamanızı sağlar.
 
Geri
Üst