From: Veysel Baydogan (vbdogan@gwu.edu)
Date: Mon 02 Jun 2003 - 17:26:05 EEST
Merhaba,
bahsi gecen *alloc fonksiyonlari ISO/IEC 9899(E)/1999 spec'de (ki uretilen
library'ler buna uymak zorundadir cunku ANSI-C spec'i kapsamaktadir kisacasi
asil kaynak) '7.20.3 Memory Management Functions' basligi altinda
tanimlanmistir ve realloc fonksiyonu ile bolumde (7.20.3.4) Description 3'de
"If memory for the new object cannot be allocated, the old object is not
deallocated and its value is unchanged." bir tanimlama getirmistir. Ama Serdar
Koylu'nun belirtmis oldugu gibi kullanim kesinlikle hatali (ptr = realloc(ptr,
2048) ) cunku 'kutsal kitap' spec derki "The realloc function returns a
pointer to the new object (which may have the same value as a pointer to the
old object), or a null pointer if the new object could not be allocated." yani
eger obje verilen size kadar allocate edilemez ise NULL pointer return
edecektir ve sizin eski ptr adresini geri kazanma ihtimali yoktur (yukaridaki
gibi kullaniyorsaniz).
>===== Original Message From Serdar Koylu <serdarkoylu@fisek.com.tr> =====
>Selamlar..
>
>libc, kernelden "bellek bitti, tukendi, bak basinin caresine" gibi bir bilgi
alirsa oyle olur. Ama Linux kerneli bunu soylememek icin elinden geleni yapar.
Hatta, en az kullanilan programlari oldurur vs.
>
>Genel kaide olarak, gerek *alloc rutinlerinin, gerekse memset, memcpy, strcpy
>gibi rutinlerin bir sekilde zapt'u rapt'a alinmasi, en azindan bir garbage
>collector kullanilmasi tavsiye edilir. Oyleki, bilhassa development ve test
>asamalarinda tamamen her seyi denetim altinda tutan, production surumunde ise
>performans getirisi icin bunlardan ayiklanmis kodlarin kullanilmasi mantikli
>olur. Isin basinda bunlarla kim ugrasacak derken, hata bulup duzeltmek icin
10 >kat daha fazla ugrasmak gerekebilir..
>
Ayrica *alloc fonksiyonlari bilindigi uzere 'first fit', 'best fit' gibi
algoritmalarla yazilma ihtimalleri var ve bu spec'de acik olarak
belirtilmedigi icin library'i ureticeleri esnek davranabilmektedir ama bircogu
'best fit' algoritmasi kullandiklari icin 'garbage collector' kullanma
ihtiyaciniza gerek kalmayacaktir dolayisiyla performans degerlendirmesinde kod
ayiklama durumuna dusmenize ayrica gerek yok.
>Saygi ve sevgiler..
>
Saygilar.
Veysel