# Heap Belleği

Adres: https://softwaredictionary.org/tr/terimler/heap-memory
Kategori: İşletim Sistemleri
Son güncelleme: 2026-10-03
İngilizcesi: Heap Memory
Türkçe karşılığı: öbek belleği, dinamik bellek
Okunuşu: hiip memıri

Kısaca: Heap belleği, boyutu ya da ömrü önceden bilinmeyen, çalışma zamanında ayrılan ve onu oluşturan fonksiyondan uzun yaşayabilen verilerin tutulduğu bölgedir.

## Heap belleği (heap memory) nedir?

Stack'in aksine heap'in sabit bir sırası yoktur. Bir program ihtiyaç duyduğunda bir bellek bloğu ister: C'de `malloc`, C++ ve Java'da `new` ile, ya da Python ve JavaScript gibi dillerde bir nesne, liste veya string oluşturduğu her seferde örtük olarak; blok da serbest bırakılana kadar geçerli kalır. Bu, heap'i büyük veri, boyutu değişen veri ve fonksiyonlar arasında paylaşılan veri için doğru yer yapar.

Bu belleği birinin serbest bırakması gerekir. C ve C++'ta bunu programcı `free` ya da `delete` ile yapar; unutmak bellek sızıntılarına, çok erken serbest bırakmak da önemli bir güvenlik açığı kaynağı olan use-after-free hatalarına yol açar. Rust belleği güvenle serbest bırakmak için sahipliği (ownership) derleme zamanında izler; Java, C#, Python, Go ve JavaScript gibi diller de artık erişilemeyen nesneleri bulup serbest bırakan bir çöp toplayıcı kullanır.

Heap ayırma stack ayırmadan daha yavaştır: ayırıcının doğru boyutta boş bir blok bulması, neyin kullanımda olduğunu izlemesi ve boş belleğin kullanılamayacak kadar küçük boşluklara bölündüğü parçalanmayla (fragmentation) uğraşması gerekir. Bu yüzden performansa duyarlı kod nesneleri yeniden kullanır, toplu ayırma yapar ya da küçük ve kısa ömürlü değerleri stack'te tutar.

Sık yapılan bir yanlış, heap bellek bölgesinin heap veri yapısıyla bir ilgisi olduğunu düşünmektir. Yalnızca adlarını paylaşırlar: bellek heap'i bir ayırıcının yönettiği bir havuzdur; heap veri yapısı ise öncelik kuyrukları için kullanılan bir ağaçtır.

## Önemli noktalar

- Heap, boyutu ve ömrü esnek, çalışma zamanında ayrılan veriyi tutar.
- Bir fonksiyon çağrısından daha uzun yaşayan nesneler heap'te yaşar.
- C ve C++ onu elle serbest bırakır; Rust sahiplik, diğerleri çöp toplama kullanır.
- Heap ayırma stack'ten daha yavaştır ve parçalanabilir.
- Bellek heap'inin heap veri yapısıyla ilgisi yoktur.

## Örnek: C'de stack ve heap

```c
#include <stdlib.h>
#include <string.h>

char *make_greeting(const char *name) {
    char local[16] = "Hello, ";              // stack: gone when the function returns
    size_t len = strlen(local) + strlen(name) + 1;

    char *greeting = malloc(len);            // heap: survives the return
    if (!greeting) return NULL;
    strcpy(greeting, local);
    strcat(greeting, name);
    return greeting;                         // the caller now owns this memory
}

int main(void) {
    char *g = make_greeting("Ada");
    /* ... use g ... */
    free(g);                                 // forget this and you have a memory leak
    return 0;
}
```

## Sık sorulan sorular

**Bellek ne zaman heap'te ayrılır?**

Boyutu derleme zamanında bilinmediğinde, büyük olduğunda ya da onu oluşturan fonksiyondan daha uzun yaşaması gerektiğinde. Java, Python ve JavaScript gibi yönetilen dillerde nesnelerin çoğu otomatik olarak heap'te ayrılır.

**Heap'te bellek sızıntısı nedir?**

Artık ihtiyaç duyulmayan ama program onu serbest bırakmayı unuttuğu ya da hâlâ ona bir referans tuttuğu için hiç serbest bırakılmayan heap belleğidir. Programın bellek kullanımı da zamanla büyür.

**Heap belleği ile heap veri yapısı aynı şey mi?**

Hayır. Bellek heap'i, bir ayırıcının yönettiği bir bellek bölgesidir. Heap veri yapısı ise en küçük ya da en büyük öğeyi en üstte tutan bir ağaç türüdür. Yalnızca adları ortaktır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
