À propos du projet

# mimalloc-pprof Un fork de [microsoft/mimalloc](https://github.com/microsoft/mimalloc) qui ajoute un **profilage de tas échantillonné compatible pprof**, avec Windows natif comme cible de premier ordre aux côtés de Linux et macOS. Il importe et revérifie également toutes les fonctionnalités de restitution de mémoire de Bun (alias « hole punch »). ## Fonctionnalités clés - **Profilage de tas compatible pprof** : suit les allocations vivantes échantillonnées et écrit soit le format texte `heap_v2` de gperftools, soit un `profile.proto` pprof non compressé. Les deux s'ouvrent directement dans [google/pprof](https://github.com/google/pprof) pour les flame graphs, graphes d'appels, rapports top et diffs de profils. - **Windows de premier ordre** : le seul profileur de tas mimalloc qui produit des profils Windows utilisables. Le mimalloc amont n'a pas de profileur ; le fork de Bun capture les piles Win32 mais n'émet aucune correspondance de modules. Ce fork énumère explicitement les modules chargés. - **Restitution de mémoire** : inclut les fonctionnalités de restitution de mémoire de Bun (purge de trous, thread de purge en arrière-plan, purge différée dans le temps) et ajoute une purge anticipée à l'échelle du processus depuis n'importe quel thread (conditionnée, parquée par défaut), la purge de trous sous-page et la récupération explicite d'arènes vides. - **Statistiques exactes** : `mi_stats_get`, `mi_stats_get_json`, dump JSON par tas, profilage exact DHAT (format Valgrind), callbacks d'événements d'allocation et instantané de tas vivant avec un visualiseur. - **Robustesse** : gestionnaires fork() avec ordre de verrouillage documenté, vérificateur d'ordre de verrouillage à l'exécution, protocole de revendication ABA pour le démontage du tas avec tests d'injection de fautes, allocations avec pages de garde, mode de compilation durci/sécurisé, suivi ASan/Valgrind/ETW. - **Support des plateformes** : Windows MSVC et MinGW, interposition de zone malloc et introspection de zone sur macOS, Linux. Crate Rust de première partie avec API C complète. - **Performance** : benchmarks étendus face à TCMalloc, jemalloc, Microsoft mimalloc et Bun mimalloc sur la mise à l'échelle des threads, les distributions de tailles demandées, les threads de courte durée et la restitution de mémoire après inactivité. ## Intégration Le profilage est opt-in deux fois : à la compilation (cargo `features = ["pprof"]` ou CMake `-DMI_PPROF=ON`) et à l'exécution (API de démarrage ou `MIMALLOC_PROF=1`). La compilation par défaut est un simple allocateur rapide. ## Version Suit la ligne `dev3` du mimalloc amont (crate `mimalloc-pprof` 1.x). La ligne héritée v2 (0.8.x) est préservée sur la branche `v2` mais n'est pas maintenue. ## Documentation - [Comparaison des fonctionnalités](#feature-comparison) : côte à côte avec Microsoft MiMalloc-V3, le fork de Bun et jemalloc, avec chaque cellule sourcée. - [Mise à l'échelle des threads](#thread-scaling-by-allocation-pattern) : débit agrégé à 1-8 workers pour six motifs d'allocation. - [Mémoire restituée après inactivité](#memory-returned-after-idle) : ce que chaque allocateur rend lorsqu'une rafale de travail se vide. - [Performance](#performance) : méthodologie complète, tableaux par cellule et familles de benchmarks. - [Pourquoi utiliser ce fork](#why-use-this-fork) : le fork mimalloc le plus testé qui existe. - [Fonctionnalités de Bun](#bun-features) : chaque fonctionnalité portée depuis oven-sh/mimalloc, et ce qui a été délibérément laissé de côté. - [Profilage et observabilité](#profiling-and-observability) : pprof échantillonné, statistiques exactes, DHAT, événements mémoire. - [Bugs amont trouvés et corrigés](#upstream-bugs-found-and-fixed) : dont deux fuites de mémoire non bornées. - [Q&R](#qa)