Mmap at malloc

Anonim

mmap vs malloc

Mayroong mga dynamic na memorya sa C at ang mga puntong ito sa paglalaan ng memorya sa wika ng C programming sa pamamagitan ng isang hanay ng mga function na naroroon sa karaniwang pamantayan ng C. Ang isa sa mga ito ay malloc, na tumutukoy sa paglalaan ng memorya. Sa sistema ng UNIX may mmap, na tumutukoy sa isang memory na naka-map na sistema na nagmumula sa sarili nitong natatanging I / O. Ang dalawang ito (mmap at malloc) ay magkakaroon ng halaga sa mukha ng parehong function ngunit ang karagdagang pagsusuri ay nagpapakita ng ilang mga pagkakaiba. Ang mga pagkakaiba, na lumabas mula sa pag-andar, ay nakabalangkas sa ibaba.

Mga pagkakaiba

Una, mahalaga na maitatag kung mayroong anumang katibayan na nagpapahiwatig na mayroong makabuluhang pagkabagabag ng memorya na magagamit. Ginagawa ito sa pamamagitan ng pagsukat ng pagganap ng programa laban sa pamamahala ng memorya.

Ang pangunahing interface ng paglalaan ng memory ay malloc. Ito ang pinakamalaking sa library ng C. Bahagi ng pamamahala ng code na nakapaloob dito ay mmap. Kapag tumatakbo ang malloc, tinitipon nito ang lahat ng magagamit na mga pasilidad ng system. Ang karagdagang mga pasilidad ng sistema ay maaaring mapakilos sa pamamagitan ng kernel, na isa sa mga estratehiya sa pamamahala ng memorya na ginagamit ng mga sistema upang matiyak na may kasiya-siyang memory allocation. Ang proseso ay hindi tapat, bagaman, at ginawa upang maging kumplikado para sa tanging dahilan ng pagpigil sa mga tao na lumikha ng mga simpleng programa na maaaring magiba ang paglalaan ng memory at samakatuwid ay lumikha ng mahinang pagganap.

Ang 'mmap' sa kabilang banda ay isang sistema ng tawag na tumatagal ng singil at hinihiling ang kernel upang makahanap ng isang hindi nagamit at magkalapit na rehiyon sa isang address ng application na sapat na malaki upang pahintulutan ang pagmamapa ng ilang mga pahina ng memorya. Mayroon ding paglikha ng mga virtual na istraktura ng pamamahala ng memorya na maaaring hindi magresulta sa isang segfault.

Ang Pangkalahatan ay karaniwang nagtutuon sa karamihan ng proseso ng pamamahala ng memorya. Kung ang programa ay nangangailangan ng karagdagang memorya, ito ay hiniram mula sa OS. Ang Mmap sa kabilang banda ay gumagamit ng isang paglipat ng konteksto na nag-convert sa kernel land.

Ang Malloc ay pinaka-angkop para sa paglalaan ng memorya sa anumang application na tumatakbo sa system kumpara sa paggamit ng mmap. Ito ang kinakailangan upang mangyari sa pamamagitan ng default, bukod sa mga espesyal na kaso kung maaari itong pahintulutan.

Maaaring gamitin ang Mmap upang pabilisin ang tugon na ibinigay ng mga application. Gayunpaman, ito ay hindi maipapayo kung ito ay nagtatapos sa pagsasakripisyo ng ilang mga byte sa mga pahina upang ang application ay maaaring tumakbo nang maayos. Kahit na ang nilalaman ng data ay maaaring tila maliit sa simula, extrapolating ito kapag maraming mga application na nais na tumakbo ay maaaring epekto mabagal ang sistema kahit na higit pa.

Matapos ang pagsukat ng pagganap at paggamit ng mga mapagkukunan, ang isang masusing pagsusuri ng paggamit ng data sa pamamagitan ng lahat ng mga application na tumatakbo sa system ay dapat gawin. Kung ang mga lifetimes ng mga application na tumatakbo ay maaaring ipakita na ito ay maaaring maging mas mahusay.

Ang paggamit ng mmap para sa paglalaan ng memorya ay may kapansanan na ang paglalaan at deallocation ng data sa mga chunks ay mahal. Ito ay dahil ang data ay nahahati sa maraming lugar, at tinanggihan rin ang paggawa mula sa paggawa ng mga tawag sa system.

Mmap ay advantageous sa paglipas ng malloc dahil memorya na ginamit up sa pamamagitan ng mmap ay agad ibabalik sa OS. Ang memorya na ginamit ng malloc ay hindi naibabalik maliban kung may break na data segment. Ang memorya na ito ay espesyal na pinananatiling muli.

Buod

Ang 'malloc' ay kumakatawan sa pangunahing punto ng paglalaan ng memorya

Ang isang sistema ng mmap ay tumatawag at humiling ng isang kernel upang maghanap ng mga hindi ginagamit na rehiyon sa mga address ng application na maaaring tumanggap ng pagma-map ng maraming pahina ng memorya

Ang Mmap ay hindi inirerekomenda para sa paglalaan ng memorya habang nahahati nito ang magagamit na memory at hindi maaaring gumawa ng mga tawag sa system

Ang isang benepisyo ng mmap sa ibabaw ng malloc ay ang pagkakaroon ng memorya, kumpara sa malloc memory, na muling ginagamit.