Microsoft heeft een bibliotheek geopend onder de MIT-licentie met implementaties van een geheugentoewijzingssysteem, oorspronkelijk ontwikkeld voor runtime-componenten van talen en . Mimalloc is aangepast voor gebruik in standaardtoepassingen zonder dat hun code hoeft te worden gewijzigd en kan fungeren als een transparante vervanging voor de malloc-functie. Het ondersteunt werking op Windows, macOS, Linux, BSD en andere Unix-achtige systemen.
Een belangrijk kenmerk van mimalloc is de compactheid van de implementatie (minder dan 3500 regels code) en de zeer hoge prestaties. In overtrof mimalloc in prestaties alle concurrerende geheugentoewijzingsbibliotheken, waaronder , , , en .
Voor de prestatie-evaluatie is een set bestaande In sommige tests overtreft mimalloc andere systemen met enkele malen, bijvoorbeeld, in de test voor het migreren van objecten tussen verschillende threads was mimalloc meer dan 2,5 keer sneller dan tcmalloc en jemalloc. Bij de meeste tests is er ook een lager geheugenverbruik waargenomen, en in sommige gevallen kan het geheugenverbruik met 25% worden verminderd.

De hoge prestaties worden voornamelijk bereikt door het gebruik van segmentatie van de lijst met vrije blokken (free list sharding). In plaats van ƩƩn grote lijst past mimalloc een splitsing toe in een reeks kleinere lijsten, waarbij elke lijst aan een geheugensegment is gekoppeld. Deze benadering vermindert fragmentatie en verhoogt de lokalisatie van gegevens in geheugen. Een geheugensegment verwijst naar een geclusterd set van blokken die qua grootte dicht bij elkaar liggen. In 64-bits systemen is de grootte van een segment doorgaans 64 KB. Wanneer er geen bezette blokken meer in het segment zijn, wordt het volledig vrijgegeven met de teruggave van het geheugen aan het besturingssysteem, wat helpt bij het verminderen van geheugenkosten en fragmentatie in langdurig draaiende programma's.
De bibliotheek kan worden verbonden tijdens de linkingfase of worden geladen voor een al gecompileerd programma ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). De bibliotheek biedt ook voor de integratie van functionaliteit in runtime en voor een fijne controle over het gedrag, bijvoorbeeld voor het aansluiten van handlers voor uitgestelde geheugenvrijgiving en monotone verhogingen van referentietellers. Er is de mogelijkheid om in de applicatie meerdere 'heaps' aan te maken en te gebruiken voor distributie over verschillende geheugengebieden. Dit omvat ook de mogelijkheid om een heap volledig vrij te geven, zonder iteratie en zonder afzonderlijke vrijgave van de daarin toegewezen objecten.
Er is een mogelijkheid om de bibliotheek te bouwen in een veilige modus, waarin op de grenzen van blokken speciale controlepagina's voor geheugen (guard-page) worden geplaatst, en er ook randomisatie van blokdistributie en encryptie van lijsten met vrijgegeven blokken wordt gebruikt. Dergelijke maatregelen helpen de meeste typische technieken voor uitbuiting van buffer overflow in heaps te blokkeren. Bij inschakeling van de veilige modus daalt de prestaties met ongeveer 3%.
Een van de kenmerken van mimalloc is ook de ongevoeligheid voor problemen met opblazen bij hoge fragmentatie. In het slechtste geval stijgt het geheugengebruik met 0,2% voor metadata en kan het tot 16,7% voor toegewezen geheugen bereiken. Om conflicten bij toegang tot bronnen te voorkomen, worden in mimalloc alleen atomaire operaties gebruikt.
Bron: opennet.ru
