Microsoft a deschis codul pentru sistemul de alocare a memoriei mimalloc

Microsoft a deschis o bibliotecă sub licența MIT mmalloc din implementări ale unui sistem de alocare de memorie creat inițial pentru componentele de rulare ale limbilor Koka и sarac. Mimalloc este adaptat pentru utilizare în aplicații standard fără modificarea codului și poate acționa ca un înlocuitor transparent pentru funcția malloc. Acceptă lucrul pe Windows, macOS, Linux, BSD și alte sisteme asemănătoare Unix.

Caracteristica cheie a mimalloc este implementarea sa compactă (mai puțin de 3500 de linii de cod) și performanța foarte ridicată. ÎN testele efectuate mimalloc a depășit toate bibliotecile concurente de alocare a memoriei, inclusiv jemalloc, tcmalloc, snmalloc, rpmalloc и tezauriza.

Pentru a evalua performanța, un set de existente teste standard În unele teste, mimalloc este de multe ori mai rapid decât alte sisteme; de ​​exemplu, în testul de migrare a obiectelor între diferite fire, mimalloc s-a dovedit a fi de peste 2.5 ori mai rapid decât tcmalloc și jemalloc. În același timp, în majoritatea testelor, se observă și un consum mai mic de memorie; în unele situații, consumul de memorie poate fi redus cu 25%.

Microsoft a deschis codul pentru sistemul de alocare a memoriei mimalloc

Performanța ridicată este atinsă în principal prin utilizarea sharding-ului gratuit. În loc de o listă mare, mimalloc folosește o serie de liste mai mici, fiecare dintre acestea fiind legată de o pagină de memorie. Această abordare reduce fragmentarea și crește localitatea datelor în memorie. O pagină de memorie este un set grupat de blocuri de dimensiuni similare. Pe sistemele pe 64 de biți, dimensiunea paginii este de obicei de 64 KB. Dacă în pagină nu au rămas blocuri ocupate, aceasta este complet eliberată, iar memoria este returnată sistemului de operare, ceea ce reduce costurile de memorie și fragmentarea în programele de lungă durată.

Biblioteca poate fi inclusă în etapa de conectare sau încărcată pentru un program deja asamblat (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Biblioteca oferă și API pentru integrarea funcționalității în timpul de execuție și controlul comportamentului cu granulație fină, de exemplu, pentru conectarea gestionarilor de eliberare a memoriei leneși și a contoarelor de referință care cresc monoton. Este posibil să creați și să utilizați mai multe „heaps” într-o aplicație pentru distribuție în diferite zone de memorie. De asemenea, este posibil să eliberați în întregime grămada, fără a trece prin și eliberarea separată a obiectelor plasate în el.

Este posibilă construirea bibliotecii într-un mod sigur, în care paginile speciale de verificare a memoriei (pagini de gardă) sunt înlocuite la granițele blocurilor și se utilizează randomizarea distribuției blocurilor și criptarea listelor de blocuri eliberate. Astfel de măsuri fac posibilă blocarea celor mai comune tehnici de exploatare a depășirilor de buffer bazate pe heap. Când activați modul sigur, performanța scade cu aproximativ 3%.

Printre caracteristicile mimalloc, se remarcă, de asemenea, că nu este susceptibil la probleme de balonare din cauza fragmentării mari. În cel mai rău caz, consumul de memorie crește cu 0.2% pentru metadate și poate ajunge la 16.7% pentru memoria distribuită. Pentru a evita conflictele la accesarea resurselor, mimalloc folosește numai operații atomice.

Sursa: opennet.ru

Adauga un comentariu