Thread overview
malloc/brk/mmap
May 16, 2018
hsencan
May 16, 2018
fatih (fatih)
May 17, 2018
hsencan
May 16, 2018

Merhabalar, Şu sıralar işletim sistemi ve sistem programlama konularına merak saldım. Basit düzeyde inceliyorum :)
Bir kod parçacığında brk() fonksiyonu ile bellek tahsis ettiğini gördüm. Bu fonksiyonun "malloc"tan farkı nedir ? Yoksa brk() ve mmap()
sistem çağrıları için mi kullanılıyor ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 16, 2018

Hangi isletim sistemi olduguna gore epey degisse de, sistemden bellek almanin temel yolu 'sbrk' adli sistem cagrisidir. Problem su ki 'sbrk' basitce bir stack allocator gibi calisiyor, yani sadece ustten allocate edip ustten free edebiliyoruz:

auto x = sbrk(100);
auto y = sbrk(50);
// free yok, dogrudan sbrk'i geri cekiyoruz:
sbrk(-50); // free y
sbrk(-100); // free x

Mesela sunu 'sbrk' ile yapmak mumkun degil:

auto x = sbrk(100);
auto y = sbrk(50);
sbrk(-100); // free x
sbrk(-50); // free y

Malloc, 'sbrk''i kullanarak kendine buyukce bir alan alip, bu alani kucuk parcalara bolerek programin kalanina daha kolay kullanilacak sekilde dagitir:

auto x = malloc(100);
auto y = malloc(50);
free(x);
free(y);

'mmap' programlara sanal bellek sistemine low level ulasim veren bir API. Memory allocation ile alakali rolu ise, 'sbrk' ile ugrasmadan dogrudan yeni sanal bellik page'leri allocate edebiliyor olmasi.

'sbrk''e gore arti yonu stack mantigiyla calismamasi, yani 5 tane page allocate edip istedigin sirayla geri verebilirsin. Kotu yani ise pool allocator mantigiyla calismasi, yani 100 byte'lik allocation yapsan da sistemdeki page boyutu ne kadarsa (4096 yada 8192 yaygin boyutlar) en az o kadar bellik ayrilacak. Bu probleme de genel olarak internal fragmentation adi veriliyor.

'malloc' 'sbrk' disinda 'mmap' de kullanabiliyor. Ornegin dogrudan bir page boyutu ile malloc cagirirsak yada buyukce bir allocation yapmak istersek yaygin 'malloc' implementationlari cagrilari dogrudan 'mmap'e yonlendiriyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 17, 2018

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]