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
| Özellik | Stack | Heap |
|---|---|---|
| Veri Boyutu | Sabit (Derleme zamanında bilinmeli). | Dinamik (Çalışma zamanında değişebilir). |
| Erişim Hızı | Çok Hızlı. | Daha Yavaş. |
| Yaşam Süresi | Fonksiyon bitince sona erer. | Manuel silinene kadar devam eder. |
| Yerleşim | Sı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.