Bu rehber, özellikle client source geliştirenler için hazırlanmıştır. İçeriğinde, Memory Leak tespiti, Valgrind kullanımı, RAM optimizasyon teknikleri ve modern C++ uygulamaları detaylı ve güncel şekilde ele alınmıştır.
🧠 Memory Leak Nedir?
Memory Leak, bir programın ayırdığı belleği (malloc / new) geri bırakmaması durumudur.

Belirtiler:
- RAM kullanımının sürekli artması
- FPS düşüşleri
- Uzun süre sonra program çökmesi
- Stabilite problemleri
⚠️ Valgrind Hakkında
Valgrind, Linux ortamında native olarak çalışır; Windows üzerinde doğrudan desteklenmez. Alternatif çözümler:
- WSL (Windows Subsystem for Linux)
- Virtual Machine (Ubuntu vb.)
- Dr.Memory
🛠️ Valgrind Kurulumu
sudo apt update
sudo apt install valgrind
🚀 Valgrind Kullanımı
g++ -g client.cpp -o client
valgrind --leak-check=full --show-leak-kinds=all ./client
Detaylı analiz için:
valgrind --tool=memcheck --track-origins=yes --leak-check=full ./client
📊 Çıktı Okuma
==1234== 64 bytes in 1 blocks are definitely lost
- definitely lost → Kesin leak
- indirectly lost → Bağlı leak
- possibly lost → Şüpheli leak
- still reachable → Kritik değil

🧨 Yaygın Hatalar ve Modern Çözümler
1. Raw Pointer Kullanımı (ÖNERİLMEZ)
❌ Eski kullanım:
std::vector<int*> list;
list.push_back(new int(5));
for(auto ptr : list) delete ptr;
✔ Modern C++ çözüm:
#include <memory>
std::vector<std::unique_ptr<int>> list;
list.push_back(std::make_unique<int>(5));
2. DELETE Kullanımı
❌ Gereksiz kontrol:
if(ptr != nullptr) delete ptr;
✔ Doğru kullanım:
delete ptr;
ptr = nullptr;
3. malloc / free Kullanımı
char* buffer = (char*)malloc(256);
free(buffer);
4. String Optimizasyonu
❌ Verimsiz:
std::string s = "test";
s = s + "abc";
✔ Optimize:
std::string s = "test";
s.reserve(100);
s += "abc";
🧠 RAM Optimizasyon Teknikleri
- Smart Pointer Kullanımı:
unique_ptr/shared_ptr - Object Pool: Sürekli allocation yapmamak, reuse sistemi kurmak
- Asset Yönetimi: Lazy loading, cache sistemi, kullanılmayanları temizleme
- Gereksiz Allocation’dan Kaçın
for(int i = 0; i < 10000; i++) new Object(); // kaçınılmalı
⚠️ Valgrind Hataları
- Program çok yavaş çalışabilir (10-20x normal hız) → Normal
- Invalid Read / Write → Örnek:
int arr[5]; arr[10] = 1; - Segmentation Fault → Null pointer veya free sonrası erişim
🔍 Debug ile Kullanım
g++ -g client.cpp -o client
valgrind ./client
🧩 Bonus: SAFE_DELETE Macro
#ifdef DEBUG
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=nullptr; } }
#else
#define SAFE_DELETE(p) delete (p)
#endif
🔚 Sonuç
- Daha düşük RAM kullanımı
- Daha stabil client
- Daha az crash
- Daha iyi performans
Paylaş :




