2009/10/10 Ugur Arpaci <ugurarp...@gmail.com>:
> malloc ile girdiğiniz input kadar structure içindeki next pointer'ı bir nod
> point eder, yani ne kadar input o kadar nod = o kadar memory allocation.

Malesef hayır. page size'ın tam katı olmayan bir büyüklükteki hafızayı
alloc edemezsiniz.
Peki o zaman şunu sormalıyız malloc ne yapar ? onlarca malloc kodu var
hatta bazı firmalar sadece malloc kodu satıyorlar. Fakat en basit hali
ile şöyle özetleyebiliriz. Malloc page size büyüklüğünde büyük
allocationlar yapar (bunlara bazıları chunk diyorlar) sonra bu
parçaların içine bir linkled list ekleyerek (bizim en son ne kadar
hafıza istediğimiz'de o listede var) geri döndürürler

Yani malloc'un döndürdüğü hafıza kendi alloc'ladığından ufak parçadır.
Örneğin eğer 2. çağrıda elinde yeterince hafıza varsa yenisini
alloclamaz, buradan bir parça daha gösterir.

Örneğin
İlk seferde
1 byte'da alloclasanız sistemden aldınız hafıza 0x1000 byte olur
(genelde page size bu oluyor, ama 4MB'lık page'de olabilir)
1000 byte alloclasanız da gene 0x1000 byte olur.
Yani 0x1001 byte için 0x2000 byte alloclarsanız.

Pool allocator demek eşit büyüklükteki (tıpkı sizin liste gibi)
tekrarlanan allocationları hızlandırmak ve memory fragmantation'u
önlemek için bir sistemdir. Windows kernel'in sanırım nt4'den var.

Memory fragmantation ise tıpkı hard disk'in fragmantation'una benzer.
Hafıza öyle kullanılmıştır ki, örneğin 3Gb boş yeriniz vardır ama siz
100Mb bile alloc'layamazsınız çünkü 100Mb uzunluğunda bir bölge
yoktur.
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama

Cevap