Metin2 Performans Artışı: Memory Leak Tespiti ve RAM Optimizasyonu

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.

image-84 Metin2 Performans Artışı: Memory Leak Tespiti ve RAM Optimizasyonu

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
image-85-1024x640 Metin2 Performans Artışı: Memory Leak Tespiti ve RAM Optimizasyonu

🧨 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ş :