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
#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
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ı
int a = 10;
____ *p = &a;
int a = 10;
int *p = &a;
Açıklama: int *p ile a'yı gösteren işaretçi tanımlanır.