A Microsoft kiadott egy MIT licenc alatt álló könyvtárat a memóriaelosztó rendszer megvalósításáról, amelyet eredetileg a nyelvek futásidejű komponensei számára alakítottak ki és . A Mimalloc úgy van optimalizálva, hogy a tipikus alkalmazásokban programkód módosítása nélkül használható, és átlátszó helyettesítője lehet a malloc függvénynek. Támogatott Windows, macOS, Linux, BSD és más Unix-alapú rendszerekben.
A mimalloc kulcsfontosságú jellemzője a megvalósítás tömörsége (kevesebb mint 3500 sor kód) és a rendkívül magas teljesítmény. A a mimalloc minden versenytárs memóriaelosztó könyvtár teljesítményét felülmúlta, beleértve a , , , és .
A teljesítményértékeléshez már meglévő Néhány tesztben a mimalloc más rendszereket többszörösen felülmúlt, például az objektumok különböző szálak közötti migrációs tesztében a mimalloc több mint 2,5-szer gyorsabb volt, mint a tcmalloc és a jemalloc. Ezen kívül a legtöbb teszt során alacsonyabb memóriafogyasztás is megfigyelhető, bizonyos esetekben a memóriafogyasztást 25%-kal sikerült csökkenteni.

A magas teljesítmény főként a szabad blokklista (free list sharding) szegmentálásának alkalmazásának köszönhető. Ahelyett, hogy egy nagy lista lenne, a mimalloc egy sor kisebb lista használatát alkalmazza, mindegyik a memória egy lapjához kötve. Ez a megközelítés csökkenti a töredezettséget és fokozza az adatok lokalizációját a memóriában. A memóriaoldal alatt egy közel azonos méretű blokkokból álló csoportot értünk. 64 bites rendszereken a lap mérete általában 64 KB. Ha a lapon nincsenek elfoglalt blokkok, akkor azt teljesen felszabadítja, visszaadva a memóriát az operációs rendszernek, ami csökkenti a memóriafogyasztást és a töredezettséget a hosszú ideig futó programokban.
A könyvtár köthető linkelési szakaszban vagy betölthető egy már elkészült programhoz ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). A könyvtár emellett biztosít a funkciók integrálásához futásidőben és a viselkedés finomhangolásához, például a késleltetett memóriafelszabadító kezelők és a monoton hivatkozásszámlálók csatlakoztatásához. Lehetővé teszi az alkalmazásban több „halom” (heap) létrehozását és használatát a különböző memória területek elosztása érdekében. Úgyszintén lehetséges a halom teljes felszabadítása anélkül, hogy a benne elhelyezett objektumokat külön-külön kellene átnézni és felszabadítani.
Lehetőség van a könyvtár biztonságos módban való összeállítására, ahol a blokkok határán speciális védőoldalak (guard-page) beillesztése mellett a blokkok elosztásának véletlenítése és a felszabadítandó blokkok listáinak titkosítása is történik. Ezek az intézkedések lehetővé teszik a halom túltöltési technikáinak többségének megakadályozását. A biztonságos mód engedélyezése körülbelül 3%-kal csökkenti a teljesítményt.
A mimalloc egyik jellemzője, hogy nem szenved a nagymértékű fragmentáció okozta túlnagyobbodástól. A legrosszabb forgatókönyvben a memóriafogyasztás a metaadatok esetében 0,2%-kal nő, és elérheti a 16,7%-ot az elosztott memória tekintetében. A mimallocban a forrásokhoz való hozzáférés konfliktusainak elkerülése érdekében csak atomikus műveletek alkalmazása történik.
Forrás: opennet.ru
