mmap vs malloc
C-s on dünaamiline mälu ja see osutab mälu jaotamisele C-programmeerimiskeeles C-standardi teegis sisalduvate funktsioonide komplekti kaudu. Üks neist on malloc, mis viitab mälu jaotusele. UNIX-süsteemis on mmap, mis viitab mälukaardistatud süsteemile, millel on oma ainulaadne I / O. Need kaks (mmap ja malloc) täidavad nimiväärtuses sama funktsiooni, kuid edasine uurimine näitab mõningaid erinevusi. Need funktsionaalsusest tulenevad erinevused on toodud allpool.
Erinevused
Esiteks on oluline kindlaks teha, kas on mingeid tõendeid, mis viitaksid olemasoleva mälu märkimisväärsele lämmatamisele. Seda tehakse programmi jõudluse mõõtmise teel mäluhalduse suhtes .
Peamine mälu jaotamise liides on malloc. See on C-raamatukogu suurim. Osa selles sisalduvast juhtimiskoodist on mmap. Kui malloc töötab, kogub see kõik saadaolevad süsteemi võimalused. Tuuma kaudu saab mobiliseerida täiendavaid süsteemiseadmeid, mis on üks mäluhaldusstrateegiaid, mida süsteemid kasutavad rahuldava mälujaotuse tagamiseks. Protsess ei ole siiski sirgjooneline ja see on tehtud keeruliseks ainuüksi põhjusel, et takistada inimesi looma lihtsaid programme, mis võivad mälu jaotust rikkuda ja seega halva jõudluse luua.
'mmap' on teiselt poolt süsteemikõne, mis võtab vastutuse ja palub kernelil leida rakenduse aadressilt kasutamata ja külgnev piirkond, mis on piisavalt suur, et võimaldada mitme mälulehe kaardistamist. Samuti luuakse virtuaalse mälu haldusstruktuurid, mis tegelikult ei saa põhjustada segfaultit.
Malloc funktsioneerib üldiselt enamikus mäluhaldusprotsessides. Kui programm nõuab lisamälu, on see operatsioonisüsteemilt laenatud. Mmap seevastu kasutab kontekstilülitit, mis teisendatakse kerneli maaks.
Malloc sobib kõige paremini mälu eraldamiseks süsteemis töötavates rakendustes, mitte aga mmap-i kasutamiseks. See on vajalik vaikimisi toimumiseks, välja arvatud erijuhtudel, kui see võib olla lubatud.
Mmap-i saab kasutada rakenduste reageerimise kiirendamiseks. See pole siiski soovitatav, kuna lõpuks ohverdatakse mõned baitid lehtedele, et rakendus saaks tõrgeteta töötada. Kuigi andmesisu võib alguses tunduda väike, võib selle ekstrapoleerimine arvukate rakenduste käivitamiseks aeglustada süsteemi veelgi.
Pärast jõudluse ja ressursside kasutamise mõõtmist tuleks läbi viia kõigi süsteemis töötavate rakenduste andmete kasutamise põhjalik hindamine. Kui saab näidata töötavate rakenduste eluea pikkust, võib see muutuda paremaks.
Mmap kasutamine mälu eraldamiseks on puudusega, et andmete eraldamine ja jaotamine tükkidena on kallis. Selle põhjuseks on asjaolu, et andmed jagunevad arvukatesse piirkondadesse, ja see keelab ka süsteemi helistada.
Mmap on mallociga võrreldes eelistatud, kuna mmap-i kasutatud mälu naaseb kohe operatsioonisüsteemi. Malloci kasutatud mälu ei tagastata kunagi juhul, kui andmesegment on katkenud. Seda mälu hoitakse spetsiaalselt korduskasutamiseks.
Kokkuvõte
'malloc' tähistab peamist mälu eraldamise punkti
Mmap-süsteem helistab ja küsib kernelilt rakenduste aadressidest kasutamata piirkondade leidmist, mis mahutavad mitme mälulehe kaardistamise
Mmap-i ei soovitata mälu eraldada, kuna see lõhestab vaba mälu ja ei saa süsteemikõnesid teha
Mmap eelis malloci ees on mälu kättesaadavus, mitte malloki mälu, mida taaskasutatakse.