Microsoft hat eine Bibliothek unter der MIT-Lizenz eröffnet
Das Hauptmerkmal von mimalloc ist seine kompakte Implementierung (weniger als 3500 Codezeilen) und seine sehr hohe Leistung. IN
Um die Leistung zu bewerten, ist eine Reihe vorhandener
Eine hohe Leistung wird vor allem durch den Einsatz von Free List Sharding erreicht. Anstelle einer großen Liste verwendet mimalloc eine Reihe kleinerer Listen, von denen jede an eine Speicherseite gebunden ist. Dieser Ansatz reduziert die Fragmentierung und erhöht die Datenlokalität im Speicher. Eine Speicherseite ist ein gruppierter Satz von Blöcken ähnlicher Größe. Auf 64-Bit-Systemen beträgt die Seitengröße typischerweise 64 KB. Wenn auf der Seite keine belegten Blöcke mehr vorhanden sind, wird sie vollständig freigegeben und der Speicher wird an das Betriebssystem zurückgegeben, was Speicherkosten und Fragmentierung bei lang laufenden Programmen reduziert.
Die Bibliothek kann beim Linken eingebunden oder für ein bereits zusammengestelltes Programm geladen werden („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram“). Die Bibliothek bietet auch
Es ist möglich, die Bibliothek in einem abgesicherten Modus zu erstellen, in dem spezielle Speicherprüfseiten (Guard-Pages) an den Blockgrenzen ersetzt werden und eine Randomisierung der Blockverteilung und eine Verschlüsselung von Listen freigegebener Blöcke verwendet werden. Solche Maßnahmen ermöglichen es, die gängigsten Techniken zur Ausnutzung von Heap-basierten Pufferüberläufen zu blockieren. Wenn Sie den abgesicherten Modus aktivieren, verringert sich die Leistung um etwa 3 %.
Zu den Merkmalen von mimalloc gehört auch, dass es aufgrund der großen Fragmentierung nicht anfällig für Probleme mit Blähungen ist. Im schlimmsten Fall steigt der Speicherverbrauch für Metadaten um 0.2 % und kann für verteilten Speicher 16.7 % erreichen. Um Konflikte beim Zugriff auf Ressourcen zu vermeiden, verwendet mimalloc nur atomare Operationen.
Source: opennet.ru