From: Ustun ERGENOGLU (ustun.ergenoglu@gmail.com)
Date: Thu 26 Apr 2007 - 12:53:37 EEST
malloc ile aldığınız bellek alanları fonksiyondan çıktığınızda
boşalmaz, mutlaka free ile bırakmanız gerekir. sadece fonksiyonda
kullanılacak yerel değişkenler fonksiyona girince stack'den yer alıp
kullanır, çıkınca da bırakılır, ama malloc stack'den değil heap'den
yer alır ve program çalıştığı sürece kalır.
26.04.2007 tarihinde M.Atif CEYLAN <atifceylan@gmail.com> yazmış:
> herkese merhaba,
> arkadaşlar C de yazdığım bir programda cok yoğun string işlemleri
> kullanıyorum (10 larca mb lık dosyaları okuyup parse etmeye calışıyorum
> ve bu işlemi periyodik olarak devamlı olarak yapıyorum). ancak
> stringleri küçük parçalarda alıp her seferinde fonksiyona sokuyorum
> mesela :
>
> while (sart)
> islemyap(str)//burada en fazla 2 KB datam var
>
> islemyap(char *str)
> char *a = (char*)malloc(256);
> char *b = (char*)malloc(25);
>
> a = str_temizle(sub_str(str,3,255));
> b = str_temizle(sub_str(str,258,24));
> ........................
>
> şeklinde devam eden islemyap benzeri 4 fonksiyonum var.
> sorunum şu. fonksiyon sona erdiğinde ayrılan bellek alanları zaten
> boşalır düşüncesi ile değişkenlerimi free etmiyorum.
> ancak top cıktısı bir facia gibi adeta. her seferinde yükselen bir
> bellek var önümde. bu durum, çekirdeğin ihtiyat için benim programın
> ayırdığı bellek alanlarını tutması ile alakalı olabilir mi? yoksa
> fonksiyonların sonunda free etsem mi? ama o kadar fazla değişkenim var
> ki gözüm yemiyor daha kötüsü bazıları şartlara göre set edildiği için
> free işlemlerinde de kontrole ihtiyac duyacağım.fikirlerinizi bekliyorum
> iyi çalışmalar...
> M.Atıf CEYLAN
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama@liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama