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