Microsoft a ouvert une bibliothèque sous licence MIT
La principale caractéristique de mimalloc est son implémentation compacte (moins de 3500 XNUMX lignes de code) et ses très hautes performances. DANS
Pour évaluer les performances, un ensemble de
Les hautes performances sont obtenues principalement grâce à l’utilisation du partage de liste gratuit. Au lieu d'une grande liste, mimalloc utilise une série de listes plus petites, chacune étant liée à une page mémoire. Cette approche réduit la fragmentation et augmente la localité des données en mémoire. Une page mémoire est un ensemble regroupé de blocs de taille similaire. Sur les systèmes 64 bits, la taille de la page est généralement de 64 Ko. S'il ne reste plus de blocs occupés dans la page, celle-ci est complètement libérée et la mémoire est restituée au système d'exploitation, ce qui réduit les coûts de mémoire et la fragmentation des programmes à exécution longue.
La bibliothèque peut être incluse au stade de la liaison ou chargée pour un programme déjà assemblé (« LD_PRELOAD=/usr/bin/libmimalloc.so myprogram »). La bibliothèque propose également
Il est possible de construire la bibliothèque en mode sans échec, dans lequel des pages spéciales de contrôle de mémoire (pages de garde) sont remplacées aux limites des blocs, et la randomisation de la distribution des blocs et le cryptage des listes de blocs libérés sont utilisés. De telles mesures permettent de bloquer les techniques les plus courantes d'exploitation des dépassements de tampon basés sur le tas. Lorsque vous activez le mode sans échec, les performances diminuent d'environ 3 %.
Parmi les caractéristiques du mimalloc, on note également qu'il n'est pas sujet aux problèmes de ballonnements dus à une fragmentation importante. Dans le pire des cas, la consommation de mémoire augmente de 0.2 % pour les métadonnées et peut atteindre 16.7 % pour la mémoire distribuée. Pour éviter les conflits lors de l'accès aux ressources, mimalloc utilise uniquement des opérations atomiques.
Source: opennet.ru