From: M.Atif CEYLAN (atifceylan@gmail.com)
Date: Thu 26 Apr 2007 - 14:26:28 EEST
Ustun ERGENOGLU yazmış:
> 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
>
>
şöyle bir foksiyonum var.
char *fonksiyon(char *str)
{
char *Cikacak = (char *malloc(strlen(str)+1);
int i=0,j=0;
for(i=0;i<strlen(str);i++)
if (sart)
Cikacak[j++] = str[i];
return Cikacak;
}
mallocladığım alanı nasıl free edebilirim ve tuttuğu alanı free
edebilmek için bu foksiyonu daha mantıklı nasıl yazabilirim.
iyi Çalışmalar...
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama