Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
"İSTEK ÜZERİNE HAZIRLANDI"
Selamlar arkadaşlar,
Bu konuda özellikle client source geliştirenler için:
Memory Leak (hafıza sızıntısı) tespiti
Valgrind kullanımı
RAM optimizasyon teknikleri
Modern C++ doğru kullanımı
detaylı ve güncel şekilde anlatılmıştır.
Memory Leak Nedir?
Memory Leak, programın ayırdığı belleği (malloc/new) geri bırakmaması durumudur.
Belirtiler:
RAM kullanımının sürekli artması
FPS düşüşü
Uzun süre sonra crash
Stabilite problemleri
Valgrind Hakkında Önemli Not
Valgrind Linux ortamında native çalışır, Windows üzerinde doğrudan desteklenmez.
✔ Alternatifler:
WSL (Windows Subsystem for Linux)
Virtual Machine (Ubuntu vb.)
Dr.Memory
Valgrind Kurulumu
Valgrind Kullanımı
Detaylı analiz:
Çıktı Okuma
definitely lost → kesin leak
indirectly lost → bağlı leak
possibly lost → şüpheli
still reachable → kritik değil
Yaygın Hatalar ve Doğruları
1. Raw Pointer Kullanımı (ÖNERİLMEZ)
Eski kullanım:
✔ Modern C++ çözüm:
2. DELETE Kullanımı
Gereksiz kontrol:
✔ Doğru kullanım:
3. malloc / free
4. String Optimizasyonu
Verimsiz:
✔ Optimize:
RAM Optimizasyon Teknikleri
Smart Pointer Kullan
unique_ptr / shared_ptr tercih et
Object Pool Kullan
Sürekli allocation yapma
reuse sistemi kur
Asset Yönetimi
Lazy loading
Cache sistemi
Kullanılmayanları temizle
Gereksiz Allocation’dan Kaçın
Valgrind Hataları
Yavaş Çalışma
✔ Normal (10-20x)
Invalid Read / Write
Segmentation Fault
Null pointer
Free sonrası erişim
Debug ile Kullanım
Tavsiyeler
✔ Modern C++ kullan
✔ Raw pointer’dan kaçın
✔ Uzun süreli test yap
✔ Leak kontrolünü alışkanlık haline getir
Sonuç
Daha düşük RAM kullanımı
Daha stabil client
Daha az crash
Daha iyi performans
Valgrind Kullanırken Alınabilecek Hatalar
Program Çok Yavaş
✔ Normal (10-20x yavaşlatır)
False Positive Leak
Invalid Read / Write
Segmentation Fault
Debug + Valgrind Kombosu
Bonus: SAFE_DELETE Macro
EDIT
Gelen geri bildirimler doğrultusunda modern C++ kullanımı ve bazı teknik detaylar güncellenmiştir. Katkı sağlayan herkese teşekkürler.
---
İstersen bir sonraki konu olarak:
Client FPS Boost + Render Optimizasyonu (Advanced)
FiveM / MMO Script Memory Yönetimi (Deep Level)
Aynı kalitede paylaşabilirim.
--------------------------------------------------------------------------------
İyi formlar şimdiden teşekkürler işine yarayan arkadaşlar bir beğeni ref fazla görmezse sevinirim.
Selamlar arkadaşlar,
Bu konuda özellikle client source geliştirenler için:
Memory Leak (hafıza sızıntısı) tespiti
Valgrind kullanımı
RAM optimizasyon teknikleri
Modern C++ doğru kullanımı
detaylı ve güncel şekilde anlatılmıştır.
Memory Leak Nedir?Memory Leak, programın ayırdığı belleği (malloc/new) geri bırakmaması durumudur.
Belirtiler:RAM kullanımının sürekli artması
FPS düşüşü
Uzun süre sonra crash
Stabilite problemleri
Valgrind Hakkında Önemli NotValgrind Linux ortamında native çalışır, Windows üzerinde doğrudan desteklenmez.
✔ Alternatifler:
WSL (Windows Subsystem for Linux)
Virtual Machine (Ubuntu vb.)
Dr.Memory
Valgrind Kurulumu
Kod:
sudo apt update sudo apt install valgrind
Valgrind Kullanımı
Kod:
g++ -g client.cpp -o client valgrind --leak-check=full --show-leak-kinds=all ./client
Kod:
valgrind --tool=memcheck --track-origins=yes --leak-check=full ./client
Çıktı Okuma
Kod:
==1234== 64 bytes in 1 blocks are definitely lost
indirectly lost → bağlı leak
possibly lost → şüpheli
still reachable → kritik değil
Yaygın Hatalar ve Doğruları
1. Raw Pointer Kullanımı (ÖNERİLMEZ)
Eski kullanım:
Kod:
std::vector<int*> list; list.push_back(new int(5));
for(auto ptr : list) delete ptr;
Kod:
#include #include
std::vector<std::unique_ptr> list; list.push_back(std::make_unique(5));
2. DELETE Kullanımı
Gereksiz kontrol:
Kod:
if(ptr != nullptr) delete ptr;
Kod:
delete ptr; ptr = nullptr;
3. malloc / free
Kod:
char* buffer = (char*)malloc(256); free(buffer);
4. String Optimizasyonu
Verimsiz:
Kod:
std::string s = "test"; s = s + "abc";
Kod:
std::string s = "test"; s.reserve(100); s += "abc";
RAM Optimizasyon Teknikleri
Smart Pointer Kullanunique_ptr / shared_ptr tercih et
Object Pool KullanSürekli allocation yapma
reuse sistemi kur
Asset YönetimiLazy loading
Cache sistemi
Kullanılmayanları temizle
Gereksiz Allocation’dan Kaçın
Kod:
for(int i = 0; i < 10000; i++) new Object(); // kaçınılmalı
Valgrind Hataları
Yavaş Çalışma✔ Normal (10-20x)
Invalid Read / Write
Kod:
int arr[5]; arr[10] = 1;
Segmentation FaultNull pointer
Free sonrası erişim
Debug ile Kullanım
Kod:
g++ -g client.cpp -o client valgrind ./client
Tavsiyeler✔ Modern C++ kullan
✔ Raw pointer’dan kaçın
✔ Uzun süreli test yap
✔ Leak kontrolünü alışkanlık haline getir
Sonuç
Daha düşük RAM kullanımı
Daha stabil client
Daha az crash
Daha iyi performans
Valgrind Kullanırken Alınabilecek Hatalar
Program Çok Yavaş✔ Normal (10-20x yavaşlatır)
False Positive Leak
Kod:
--suppressions=valgrind.supp
Invalid Read / Write
Kod:
int arr[5]; arr[10] = 1; // ❌
Segmentation Fault
Kod:
if(ptr != nullptr) delete ptr;
Debug + Valgrind Kombosu
Kod:
g++ -g client.cpp -o client valgrind ./client
Bonus: SAFE_DELETE Macro
Kod:
#ifdef DEBUG #define SAFE_DELETE(p) { if(p) { delete (p); (p)=nullptr; } } #else #define SAFE_DELETE(p) delete (p) #endif
EDITGelen geri bildirimler doğrultusunda modern C++ kullanımı ve bazı teknik detaylar güncellenmiştir. Katkı sağlayan herkese teşekkürler.
---
İstersen bir sonraki konu olarak:
Client FPS Boost + Render Optimizasyonu (Advanced)
FiveM / MMO Script Memory Yönetimi (Deep Level)
Aynı kalitede paylaşabilirim.--------------------------------------------------------------------------------
İyi formlar şimdiden teşekkürler işine yarayan arkadaşlar bir beğeni ref fazla görmezse sevinirim.

Son düzenleme:
Valgrind Linux ortamında native çalışır, Windows uygulamalarında doğrudan desteklenmez. Beklenen performans olmayacak deneyenlerde.
Ek olarak.
for(auto ptr : list) delete ptr;
bu kısım eksik bunun yerine:
std::vector<std::unique_ptr<int>> list;
list.push_back(std::make_unique<int>(5));
-------------------------------------------------
if(ptr != nullptr) delete ptr;
Bu kısım yanlış doğrusu:
delete ptr;
ptr = nullptr;
-----------------------------------------------
std::string s = "test";
s = s + "abc";
Bu kısım yanlış doğrusu:
s.reserve(100);
s += "abc";
----------------------------------------------
g++ -g client.cpp -o client valgrind ./client
Bu kısım yanlış doğrusu:
g++ -g client.cpp -o client
valgrind ./client
Ek olarak.
for(auto ptr : list) delete ptr;
bu kısım eksik bunun yerine:
std::vector<std::unique_ptr<int>> list;
list.push_back(std::make_unique<int>(5));
-------------------------------------------------
if(ptr != nullptr) delete ptr;
Bu kısım yanlış doğrusu:
delete ptr;
ptr = nullptr;
-----------------------------------------------
std::string s = "test";
s = s + "abc";
Bu kısım yanlış doğrusu:
s.reserve(100);
s += "abc";
----------------------------------------------
g++ -g client.cpp -o client valgrind ./client
Bu kısım yanlış doğrusu:
g++ -g client.cpp -o client
valgrind ./client
Son düzenleme:
Gelen geri bildirimler doğrultusunda bazı teknik kısımlar güncellenmiştir. Katkı sağlayan herkese teşekkürler.Valgrind Linux ortamında native çalışır, Windows uygulamalarında doğrudan desteklenmez. Beklenen performans olmayacak deneyenlerde.
Ek olarak.
for(auto ptr : list) delete ptr;
bu kısım eksik bunun yerine:
std::vector<std::unique_ptr<int>> list;
list.push_back(std::make_unique<int>(5));
-------------------------------------------------
if(ptr != nullptr) delete ptr;
Bu kısım yanlış doğrusu:
delete ptr;
ptr = nullptr;
-----------------------------------------------
std::string s = "test";
s = s + "abc";
Bu kısım yanlış doğrusu:
s.reserve(100);
s += "abc";
----------------------------------------------
g++ -g client.cpp -o client valgrind ./client
Bu kısım yanlış doğrusu:
g++ -g client.cpp -o client
valgrind ./client
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 17
- Görüntüleme
- 2K
