Diferența dintre mmap și malloc Diferența dintre

Anonim

mmap vs malloc

Există o memorie dinamică în C, ceea ce 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

Mai întâi, 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 reunește 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 însă simplu și 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.

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 aplicației 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-l 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 de alocare a memoriei principale

Un sistem mmap solicită și solicită un kernel pentru a găsi regiuni neutilizate în adrese de aplicații care pot găzdui mai multe pagini de memorie

Mmap nu este recomandat pentru alocarea memoriei în timp ce împarte memoria disponibilă și nu poate face apeluri de sistem

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