Microsoft veröffentlicht mimalloc als Drop-in-Ersatz für malloc

Die Open-Source-Library zum Reservieren von Speicher zielt vor allem auf gute Performance und bietet optionale Security-Funktionen.

In Pocket speichern vorlesen Druckansicht 108 Kommentare lesen
Microsoft veröffentlicht mimalloc als Alternative zu malloc
Lesezeit: 2 Min.

Unter dem Namen mimalloc hat Microsoft kürzlich auf GitHub eine Library zum Allozieren von Speicher veröffentlicht. Ursprünglich hatte Daan Leijen mimalloc für die Laufzeitsysteme der Programmiersprachen Koka und Lean entwickelt. Sie lässt sich laut den Angaben der Entwickler als direkter Drop-in-Ersatz für malloc verwenden, erfordert also keine Codeanpassungen. Der Fokus von mimalloc liegt vor allem auf der Performance, aber die Bibliothek bietet auch optionale Security-Funktionen und lässt sich als Backend für Programmiersprachen einsetzen, die Reference Counter verwenden.

Die Entwickler haben mimalloc über unterschiedliche Benchmarks mit anderen Allokierungs-Tools wie jemalloc, tcmalloc und Hoard verglichen und die Ergebnisse im GitHub-Repository veröffentlicht. Dabei schneidet mimalloc augenscheinlich sowohl in der Performance als auch dem Speicherbedarf besser ab als das restliche Feld.

Das Readme des GitHub-Repository hebt unter anderem die schlanke Größe der Library mit 3500 Codezeilen hervor. Eine Besonderheit ist das sogenannte Free List Sharding: mimalloc hat keine globale Free LIst, sondern setzt auf zahlreiche Listen für einzelne Speicherbereiche, die bei 64-Bit-Systemen üblicherweise 64 KByte umfassen. Wie bei Betriebssystemen verwendet das Tool Speicherseiten als Ausdruck für die Bereiche (memory "page").

Die Aufteilung soll unter anderem die Fragmentierung verringern, indem sie dafür Sorge trägt, dass zeitlich nah beieinander allozierte Blöcke auch im Speicher dicht beieinander liegen.Außerdem markiert die Bibliothek komplett frei gewordene Speicherseiten für das Betriebssystem als nicht genutzt ("reset" oder "purged").

mimalloc lässt sich optional in einem Secure Mode verwenden, der unter anderem angeforderte Speicherbereiche zufällig alloziert und die Free Lists verschlüsselt. Die Performanceeinbußen durch die zusätzlichen Sicherheitsvorkehrungen liegen laut den Angaben im Readme bei etwa drei Prozent.

Microsoft betont zudem, dass mimalloc als Backend-Implementierung für Programmiersprachen wie Swift und Python taugt, die Referenzzähler für das automatische Deallokieren von Objekten verwenden. Dabei profitiert das Tool davon, dass auch die Programmiersprachen Koka und Lean das Konzept der Reference Counter verwenden. Auf Microsoft Research ist eine ausführliche Abhandlung zu dem Thema im PDF-Format zu finden.

Das GitHub-Repository zu mimalloc enthält neben dem unter MIT-Lizenz verfügbaren Sourcecode eine Anleitung zum Build der Library unter Windows, macOS und Linux. Eine ausführliche Dokumentation ist auf GitHub Pages zu finden. (rme)