Logo nl.removalsclassifieds.com

Verschil tussen Mmap en Malloc (met tabel)

Inhoudsopgave:

Anonim

Bij C-programmering is er een dynamisch geheugen dat via een reeks functies verwijst naar de toewijzing van het geheugen in de C-standaardbibliotheek. Malloc is een van deze, die wordt gebruikt voor het toewijzen van geheugen. Dan is er Mmap. Dat wordt gebruikt als een memory-mapped systeem dat zijn unieke input en output heeft. Deze twee bieden dezelfde functies, maar meer onderzoek naar dit onderwerp onthult enkele verschillen.

Mmap vs Malloc

Het verschil tussen mmap en malloc is dat de uitvoeringstijd van mmap een stuk korter is dan die van malloc. Malloc is de belangrijkste interface voor geheugentoewijzing, terwijl mmap een systeem is. Dat is verantwoordelijk voor de kernel om te zoeken naar adressen die groot genoeg zijn om het in kaart brengen van veel pagina's mogelijk te maken.

Mmap in computing is een POSIX multitasking-systeemaanroep die alle gegevens of bestanden en apparaten in zijn geheugen opneemt. Dit staat ook bekend als de methode die valt onder het geheugen toegewezen bestand en het kopiëren van gegevens naar het fysieke geheugen implementeert, omdat de inhoud niet rechtstreeks van de schijf kan worden gelezen.

Malloc is de korte vorm voor de term geheugentoewijzing die wordt gebruikt om een ​​enorm gegevensblok dynamisch toe te wijzen, met betrekking tot de opgegeven grootte, en wanneer het lukt, retourneert het een aanwijzer die verwijst naar de eerste byte van het toegewezen geheugen, anders retourneert NULL. In het eigenlijke geheugentoewijzingsmechanisme zijn er veel verschillende prestaties beschikbaar die door Malloc worden gebruikt.

Vergelijkingstabel tussen Mmap en Malloc

Parameters van vergelijking:

Mmap

Malloc

Definitie Mmap wordt verwezen naar een systeemaanroep die de kernel vraagt ​​om een ​​groot adres te vinden voor het toewijzen van pagina's. Malloc is de belangrijkste geheugentoewijzingsinterface die alle beschikbare faciliteiten in het systeem verzamelt.
Functie Mmap gebruikt de context-switch en maakt er een kernelland van. Malloc wijst het geheugenblok in apile toe.
Ook wel genoemd Mmap wordt ook wel een systeemaanroep genoemd. Malloc is ook bekend als de belangrijkste geheugentoewijzingsinterface.
Resultaten Mmap heeft geen invloed op andere systeemprestaties. Malloc desorganiseert en zorgt voor een slechte prestatie van het systeem.
Meest geschikt voor Mmap is het meest geschikt om het reactieproces van applicaties te versnellen. Malloc is het meest geschikt voor het toewijzen van geheugen aan elke toepassing in het systeem.

Wat is Mmap?

Mmap wordt verwezen naar een Unix-systeemaanroep van POSIX-compatibel die de gegevens, het bestand of het apparaat in het geheugen toewijst. Het is een invoer-, uitvoermethode voor geheugentoewijzing. Tijdens het aanroepen wordt een nieuwe toewijzing gemaakt in de virtuele adresruimte. Bij adres het initiële adres van de nieuwe toewijzing wordt gevonden en de lengte van de toewijzing wordt gespecificeerd door het lengteargument (dat meer dan 0 moet zijn).

Als de addr NULL blijkt te zijn, wordt het adres gekozen door de kernel, waardoor de mapping wordt gemaakt, wat wordt beschouwd als de gemakkelijkste methode om een ​​nieuwe mapping te maken. Als het adres niet als NULL wordt gevonden, beschouwt de kernel het als een indicatie voor het plaatsen van de toewijzing op een plaats op Linux.

De kernel vindt de dichtstbijzijnde paginagrens en probeert in dat gebied een afbeelding te maken. Als de kernel een afbeelding vindt die al in het gebied bestaat, selecteert het een nieuw adres dat mogelijk afhankelijk is van de indicatie die de kernel heeft aangenomen. Als resultaat van deze oproep wordt het adres van de nieuwe mapping teruggestuurd. Direct nadat de aanroep is geretourneerd, sluit de bestandsdescriptor, fd, de toewijzing onmiddellijk zonder ongeldig te maken.

Wat is Malloc?

De malloc () is een geheugentoewijzingsfunctie die de groottebytes toewijst en een aanwijzer terugstuurt naar het toegewezen geheugen. Het geheugen is niet in de uitgangspositie gezet. Als de bytenaam van de grootte 0 is, wordt ofwel NULL ofwel een unieke waarde-pointer verzonden door malloc (), die later met succes kan worden doorgegeven aan free ().

De geheugenruimte waarnaar ptr verwijst, wordt vrijgegeven door de functie free () die door malloc () zou worden teruggestuurd. Anders wordt gezegd dat ongedefinieerd gedrag optreedt, als de vrije (ptr) eerder is aangeroepen. Er wordt geen bewerking uitgevoerd of uitgevoerd als de ptr Gevonden NULL is. Als gevonden wordt dat de ptr NULL is, dan is de waarde van een aanroep gelijk aan malloc (size), voor elke waarde van size; als het gelijk is aan 0 en de ptr niet NULL blijkt te zijn, dan is de aanroepwaarde gelijk aan gratis (ptr).

Alleen als de ptr NULL is, had deze terug moeten worden gestuurd door een eerdere aanroep naar malloc(). En het gebied dat werd aangewezen was veranderd, een gratis (ptr) is gedaan. Standaard wordt door Linux een optimistische geheugentoewijzingsstrategie gevolgd, wat betekent dat als malloc () een niet-NULL terugstuurt, de kans bestaat dat het geheugen verloren gaat. En als blijkt dat het systeem een ​​tekort aan geheugen heeft, worden er weinig processen vernietigd door de OOM-killer.

Belangrijkste verschillen tussen Mmap en Malloc

Gevolgtrekking

Samenvattend, mmap is een systeemaanroep die de kernel vraagt ​​om een ​​leeg gebied in een toepassingsadres te lokaliseren dat zou passen in de toewijzing van verschillende geheugenpagina's, terwijl malloc een geheugentoewijzingspunt is dat een gespecificeerd geheugenblok van een bepaalde grootte toewijst. Het geheugen is ingesteld op de looptijd, wat betekent dat totdat het programma wordt uitgevoerd, er geen andere ruimte kan worden gereserveerd.

Op bepaalde plaatsen heeft mmap een voordeel ten opzichte van malloc, maar het wordt niet aanbevolen om te kiezen tussen deze twee voor het toewijzen van geheugen, aangezien mmap het geheugen splitst en dan geen systeemaanroep kan doen.

Referenties

Verschil tussen Mmap en Malloc (met tabel)