Çözüldü Memory leak olursa ne olur?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
17 Mayıs 2020
Mesajlar
2.800
Makaleler
1
Çözümler
27
Yer
Dünya
Memory leakin ne olduğunu anladım. Peki diyelim 1GB Memory leak oldu. Şimdi biz yazdığımız programı kapatsak bile RAM geri gelmiyor mu? Gelmiyorsa nasıl geri getiriyoruz?
Sadece internette okudum ama tam oalrak bu kısım aklıma takıldı.
 
Son düzenleyen: Moderatör:
Çözüm
Bellek sızıntısı dediğimiz şey, bir işlem yaparken program, işlem bittiğinde bellekten atmak yerine veya işlem bittiği halde işlem yapmaya devam ettiği zaman oluşuyor.

Programı kapattığınız zaman geri gelir kullanılan bellek.

Eğer bu sorun çözülmezse belleği bitireseye kadar çalışmaya devam eder program. Bellek dolunca doğal olarak sistemi kilitleyebilir.

Bellek sızıntısı dediğimiz şey, bir işlem yaparken program, işlem bittiğinde bellekten atmak yerine veya işlem bittiği halde işlem yapmaya devam ettiği zaman oluşuyor.

Programı kapattığınız zaman geri gelir kullanılan bellek.

Eğer bu sorun çözülmezse belleği bitireseye kadar çalışmaya devam eder program. Bellek dolunca doğal olarak sistemi kilitleyebilir.

 
Çözüm
Aşağıdaki zararsız bir bellek sızıntısı. Sistemi kitleyecek kadar dolduğunda kernel otomatik olarak temizliyor.


Ancak eğer programın bellek kullanımı hiç kontrol edilmezse bilgisayar işin sonunda kilitlenir. Hem de acı çeke çeke yavaş yavaş kilitlenir. Bu süreçte programı kapatırsan bellek serbest kalmış olur çünkü sorun şu:
C:
for (...) {
.
.
.
malloc(veri);
.
.
.
# unutulmuş bir free()
}
# unutulmuş başka bir free()
.
.
.

Bellekle işi bitmesine rağmen serbest bırakmıyor program. Eğer program kapatılırsa da bellek sahipliği onda olduğundan serbest kalıyor.

Neler olacağını deneyimlemek de aslında çok basit. Forkbomb açın ve bilgisayarı kullanmaya çalışın. Dikkat, durdurulamaz.
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı