Microsoft har åbnet et bibliotek under MIT-licensen med implementeringer af et hukommelsesfordelingssystem, der oprindeligt blev skabt til runtime-komponenter i sprog og . Mimalloc er tilpasset til brug i standardapplikationer uden ændringer i deres kode og kan fungere som en gennemsigtig erstatning for malloc-funktionen. Det understøtter drift på Windows, macOS, Linux, BSD og andre Unix-lignende systemer.
En nøglefunktion ved mimalloc er kompaktiteten af implementeringen (mindre end 3500 linjer kode) og meget høj ydeevne. I mimalloc overgik alle konkurrerende hukommelsesfordelingsbiblioteker i ydeevne, herunder , , , og .
Til vurdering af ydeevnen blev der brugt et sæt allerede eksisterende I nogle tests er mimalloc overlegen i forhold til andre systemer med flere gange, for eksempel i testen for migrering af objekter mellem forskellige tråde var mimalloc hurtigere end tcmalloc og jemalloc med mere end 2,5 gange. Desuden observeres der i de fleste tests også et lavere hukommelsesforbrug, i nogle situationer lykkes det at reducere hukommelsesforbruget med 25%.

Den høje ydeevne opnås hovedsageligt ved at anvende segmentering af listen over frie blokke (free list sharding). I stedet for én stor liste anvender mimalloc opdeling i en række mindre lister, hver af hvilke knyttes til en hukommelsesside. Denne tilgang reducerer fragmentation og forbedrer data-lokalisering i hukommelsen. En hukommelsesside forstås som et grupperet sæt af blokke, der er nærmest ens i størrelse. På 64-bit systemer er størrelsen på en side typisk 64 kB. Hvis der ikke er optagede blokke tilbage på siden, frigives det helt med tilbagelevering af hukommelsen til operativsystemet, hvilket hjælper med at reducere hukommelsesomkostninger og fragmentering i langvarige programmer.
Biblioteket kan tilsluttes på bindestadiet eller indlæses til et allerede kompilere program (‘LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram’). Biblioteket提供的 for integration of functionality at runtime and fine control over behavior, such as connecting handlers for deferred memory release and monotonically increasing reference counters. There is the possibility of creating and using multiple heaps in the application for distributing across different memory areas. It is also possible to release the entire heap at once, without iteration and separate release of the objects placed within it.
A safe mode build of the library is available, where special guard pages are inserted at the boundaries of blocks and randomization of block allocation as well as encryption of freed block lists are used. These measures help to block most common buffer overflow exploitation techniques in heaps. Enabling safe mode reduces performance by approximately 3%.
Among the features of mimalloc is its resistance to bloat issues in cases of high fragmentation. In the worst-case scenario, memory consumption increases by 0.2% for metadata and can reach up to 16.7% for allocated memory. Only atomic operations are used in mimalloc to avoid resource access conflicts.
Kilde: opennet.ru
