Diferența dintre mmap și malloc

mmap vs malloc

Există o memorie dinamică în C și aceasta indică alocarea memoriei în limbajul de programare C printr-un set de funcții prezente în biblioteca standard C. Unul dintre acestea este malloc, care se referă la alocarea memoriei. În sistemul UNIX există mmap, care se referă la un sistem mapat cu memorie care vine cu propriile I / O unice. Aceste două (mmap și malloc), la valoarea nominală, vor îndeplini aceeași funcție, dar o nouă examinare relevă unele diferențe. Aceste diferențe, care apar din funcționalitate, sunt prezentate mai jos.

diferenţe

În primul rând, este important să se stabilească dacă există dovezi care să indice că există o sufocare semnificativă a memoriei disponibile. Acest lucru se face prin măsurarea performanțelor programului față de gestionarea memoriei .

Interfața principală de alocare a memoriei este malloc. Aceasta este cea mai mare din biblioteca C. O parte din codul de gestionare conținut în el este mmap. Când rulează malloc, acesta adună toate facilitățile disponibile ale sistemului. Facilitățile suplimentare ale sistemului pot fi mobilizate prin intermediul kernel-ului, care este una dintre strategiile de gestionare a memoriei pe care sistemele le utilizează pentru a asigura o alocare satisfăcătoare a memoriei. Procesul nu este simplu însă a fost complicat pentru singurul motiv de a împiedica oamenii să creeze programe simple care pot dezorganiza alocarea memoriei și, prin urmare, pot crea performanțe slabe.

"mmap", pe de altă parte, este un apel de sistem care prelucrează și solicită kernelului să găsească o regiune neutilizată și învecinată într-o adresă a unei aplicații care este suficient de mare pentru a permite cartografierea mai multor pagini de memorie. Există, de asemenea, crearea unor structuri de gestionare a memoriei virtuale care, în realitate, nu pot duce la o segfault.

Malloc funcționează, în general, în majoritatea proceselor de gestionare a memoriei. În cazul în care programul necesită o memorie suplimentară, acest lucru este împrumutat de la sistemul de operare. Mmap, pe de altă parte, face uz de un switch de context care se transformă în pământ de kernel.

Malloc este cel mai potrivit pentru alocarea memoriei în orice aplicație care rulează pe sistem, spre deosebire de utilizarea lui mmap. Aceasta este ceea ce este necesar să se întâmple în mod implicit, altfel decât în ​​cazuri speciale când este permisă.

Mmap poate fi folosit pentru a accelera răspunsul dat de aplicații. Acest lucru nu este totuși recomandabil, deoarece sfârșește prin sacrificarea unor octeți în pagini, astfel încât aplicația să poată funcționa fără probleme. Deși conținutul de date poate părea mic la început, extrapolând-o când numeroase aplicații doresc să ruleze, poate încetini sistemul chiar mai departe.

După măsurarea performanței și a utilizării resurselor, trebuie efectuată o evaluare amănunțită a utilizării datelor de către toate aplicațiile care rulează pe sistem. Dacă durata de viață a aplicațiilor care rulează poate fi demonstrată, aceasta poate deveni mai bună.

Utilizarea lui mmap pentru alocarea memoriei are dezavantajul că alocarea și dezalocarea datelor în bucăți este costisitoare. Acest lucru se datorează faptului că datele sunt împărțite în numeroase zone, și, de asemenea, neagă mmap de efectuarea apelurilor de sistem.

Mmap este avantajos față de malloc deoarece memoria folosită de mmap este imediat returnată sistemului de operare. Memoria folosită de malloc nu este returnată decât dacă există o pauză în segmentul de date. Această memorie este menținută în mod special pentru a fi reutilizată.

rezumat

"malloc" reprezintă punctul principal de alocare a memoriei

Un sistem mmap solicită și solicită unui kernel să găsească regiuni neutilizate în adrese de aplicații care pot găzdui cartografierea mai multor pagini de memorie

Mmap nu este recomandat pentru alocarea memoriei deoarece împarte memoria disponibilă și nu poate efectua apeluri de sistem

Un avantaj al lui mmap peste malloc este disponibilitatea memoriei, spre deosebire de memoria malloc, care este refolosită.