crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Dinamik Bellek Yönetimi: Heap Üzerinde Hakimiyet
Statik bellekte (Stack) boyutlar sabittir ve program derlenirken bilinmelidir. Dinamik bellekte (Heap) ise boyutlar çalışma zamanında (runtime) belirlenir.
1. C Dünyası: malloc ve free
C dilinde bellek yönetimi, fonksiyonlar aracılığıyla manuel olarak yapılır. Bellek ayrılırken ne kadar byte yer istediğimizi belirtmemiz gerekir.
[]malloc (Memory Allocation): Belirtilen byte kadar yer ayırır ve başlangıç adresini void* tipinde döner.
[]free: Ödünç alınan belleği sisteme geri verir.
C:
// 5 adet tam sayı için yer ayır (5 * 4 byte = 20 byte)
int ptr = (int) malloc(5 * sizeof(int));
if (ptr != NULL) {
ptr[0] = 10; // Kullanım
free(ptr); // Belleği boşalt (ZORUNLU!)
}
2. C++ Dünyası: new ve delete
C++, bellek yönetimini birer operatör haline getirerek daha güvenli ve okunabilir kılmıştır. new operatörü sadece yer ayırmakla kalmaz, nesnelerin Constructor (yapıcı metotlarını) da çağırır.
[]new: Nesne veya dizi için yer ayırır.
[]delete: Tek bir nesneyi siler.- delete[]: new[] ile ayrılan bir diziyi siler.
C++:
int* sayi = new int; // Tek bir int ayır
*sayi = 100;
int* dizi = new int[10]; // 10 elemanlı dizi ayır
dizi[0] = 5;
delete sayi; // Belleği iade et
delete[] dizi; // Dizi belleğini iade et
3. Temel Farklar: C vs C++
| Özellik | malloc / free | new / delete |
|---|---|---|
| Tür | Fonksiyondur. | Operatördür. |
| Tip Güvenliği | Hayır (void* döner, cast gerekir). | Evet (Hangi tip istenirse onu döner). |
| Boyut Hesabı | sizeof ile manuel yapılır. | Otomatik hesaplanır. |
| Constructor | Çağırmaz. | Otomatik çağırır. |
4. En Büyük Tehlike: Memory Leak (Bellek Sızıntısı)
Dinamik olarak ayrılan her bellek, iş bittiğinde mutlaka sisteme iade edilmelidir. Eğer delete yapmayı unutursanız, o bellek alanı program kapanana kadar meşgul kalır. Programınız zamanla daha fazla RAM tüketmeye başlar ve sonunda sistem kilitlenir.
Sonuç
Dinamik bellek yönetimi size sonsuz esneklik sağlar ancak büyük bir sorumluluk getirir. C++'ta new kullandıysanız mutlaka bir yerlerde delete kullanmalısınız. Modern C++'ta (C++11 ve sonrası) bu işi otomatize eden Smart Pointers (Akıllı İşaretçiler) kullanımı, manuel delete işlemlerinin yerini alarak hata riskini ortadan kaldırmaktadır.