mmap vs malloc
U C-u postoji dinamična memorija i to upućuje na raspodjelu memorije u programskom jeziku C kroz skup funkcija prisutnih u standardnoj C knjižnici. Jedan od njih je malloc, koji se odnosi na raspodjelu memorije. U sustavu UNIX postoji mmap, koji se odnosi na memorijski preslikani sustav koji dolazi sa svojim jedinstvenim I / O. Ova dva (mmap i malloc) će po nominalnoj vrijednosti obavljati istu funkciju, ali daljnji pregled otkriva neke razlike. Te razlike koje proizlaze iz funkcionalnosti prikazane su u nastavku.
Razlike
Prije svega, važno je utvrditi postoje li dokazi koji ukazuju na dostupnost značajne gušenja memorije. To se postiže mjerenjem uspješnosti programa u odnosu na upravljanje memorijom .
Glavno sučelje za dodjelu memorije je malloc. Ovo je najveća u C knjižnici. Dio upravljačkog koda sadržan u njemu je mmap. Kad se malloc pokrene, on okuplja sve dostupne sadržaje sustava. Dodatni sadržaji sustava mogu se mobilizirati kroz kernel, što je jedna od strategija upravljanja memorijom koju sustavi koriste za osiguravanje zadovoljavajuće raspodjele memorije. Međutim, taj postupak nije jednostavan, i postao je kompliciran iz jedinstvenog razloga sprečavanja ljudi da stvaraju jednostavne programe koji mogu dezorganizirati dodjelu memorije i samim tim stvoriti slabe performanse.
'mmap' s druge strane sistemski je poziv koji naplaćuje i zahtijeva od kernela da pronađe neiskorištenu i neprekidnu regiju na adresi aplikacije koja je dovoljno velika da omogućuje mapiranje nekoliko stranica memorije. Postoji i stvaranje struktura za upravljanje virtualnom memorijom koja zapravo ne može rezultirati segfaultom.
Malloc općenito funkcionira u većini procesa upravljanja memorijom. Ako program zahtijeva dodatnu memoriju, ovo se posuđuje u OS-u. Mmap s druge strane koristi kontekstni prekidač koji se pretvara u zemlju kernela.
Malloc je najprikladniji za raspoređivanje memorije u bilo kojoj aplikaciji koja se pokreće u sustavu, za razliku od upotrebe mmap-a. To se mora dogoditi prema zadanim postavkama, osim u posebnim slučajevima kada je to dopušteno.
Mmap se može koristiti za ubrzavanje odgovora aplikacija. To, međutim, nije preporučljivo jer na kraju žrtvuje nekoliko bajtova stranicama kako bi aplikacija nesmetano radila. Iako se sadržaj podataka u početku može činiti malim, ekstrapoliranje istog trenutka kada se brojne aplikacije žele pokrenuti moglo bi zapravo usporiti sustav.
Nakon mjerenja performansi i upotrebe resursa treba obaviti temeljitu procjenu upotrebe podataka od strane svih aplikacija koje rade u sustavu. Ako se prikažu vijekovi trajanja aplikacija, može postati bolji.
Korištenje mmap za dodjelu memorije dolazi s nedostatkom što je dodjela i razmještanje podataka u komadima skupo. To je zato što se podaci dijele na brojna područja, a također negira mmap iz upućivanja sistemskih poziva.
Mmap je prednost u odnosu na malloc, jer se memorija koju koristi mmap odmah vraća u OS. Memorija koju koristi malloc nikad se ne vraća osim ako nema prekida segmenta podataka. Ova se memorija posebno čuva za ponovno korištenje.
Sažetak
'malloc' označava glavnu točku dodjele memorije
Mmap sustav poziva i zahtijeva kernel da pronađe neiskorištene regije u adresama aplikacija koje mogu smjestiti mapiranje nekoliko memorijskih stranica
Mmap se ne preporučuje za raspoređivanje memorije jer dijeli dostupnu memoriju i ne može upućivati sustav
Prednost mmap-a nad mallokom je dostupnost memorije, za razliku od mallokove memorije koja se ponovno koristi.