CodeBlanks Logo Icon CodeBlanks

Stack ve heap

  • C kursu
  • Başlangıç
  • Ders 100/116
  • 5 dk

Stack ve heap bellek arasındaki farkı öğrenirsin.

Stack ve heap: iki bellek bölgesi

C programları belleği iki ana bölgeye ayırır. Stack yerel değişkenleri tutar; fonksiyon çıkışında otomatik temizlenir. Heap ise malloc ile senin ayırdığın bellektir; free ile sen bırakırsın.

int a = 10;            /* stack */
int *p = malloc(4);    /* heap */

Bir değişkenin nerede yaşadığı, onu nasıl bildirdiğine bağlıdır. Stack hızlı ama küçüktür; heap büyük ama yönetimi sana aittir. Bu ayrımı bilmek, işaretçi ve bellek hatalarını anlamak için temeldir.

Stack'in çalışma biçimi

Stack, fonksiyon çağrılarıyla büyür ve küçülür. Bir fonksiyon çağrıldığında yerel değişkenleri stack'e eklenir; fonksiyon döndüğünde bu alan serbest bırakılır.

void f(void) {
    int x = 5;  /* stack'te */
}
/* f çıkınca x yok olur */

Bu yüzden bir fonksiyonun yerel değişkeninin adresini döndürmek tehlikelidir; çünkü o adres artık geçersizdir. Stack hızlıdır ama kapasitesi sınırlıdır; çok derin özyineleme stack taşmasına yol açar.

Uygulama İşaretçi ile yerel değişkene eriş

int a = 10 tanımla (stack'te). a'yı gösteren int * bir işaretçi tanımla. printf ile işaretçinin gösterdiği değeri yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

int main(void) {
    int a = 10;
    // a'yı gösteren bir işaretçi tanımla; printf ile gösterdiği değeri yazdır
    return 0;
}

Örnek çözüm

main.c
int *p = &a;
printf("%d\n", *p);

Beklenen çıktı

10

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 int a = 10; yerel değişkeni hangi bellek bölgesinde tutulur?

  • Stack Doğru cevap
  • Veri segmenti
  • Heap
  • Yazmaç

Açıklama: Yerel değişkenler stack'te tutulur.

2 Bölge ve özellik eşleştir

Kavram Anlamı
Stack Yerel değişkenler
Heap malloc ile ayrılır
free Heap bellek bırakır
otomatik Fonksiyon çıkınca temizlenir

3 Boşluğu doldur: işaretçi tanımı

Soru
int a = 10;
____ *p = &a;
Cevap
int a = 10;
int *p = &a;

Açıklama: int *p ile a'yı gösteren işaretçi tanımlanır.

Başlangıç bölümündeki tüm dersler