Jemallocator : Alternative d'Allocateur Mémoire jemalloc pour Rust
L'allocateur par défaut peut parfois tarder à libérer la mémoire. Il est recommandé d'utiliser jemallocator comme allocateur global pour remplacer celui par défaut.
jemallocator est une bibliothèque liée à l'allocateur mémoire jemalloc, fournissant le type unitaire Jemalloc qui implémente l'API d'allocateur et peut être défini comme #[global_allocator].
tikv-jemallocator est le projet successeur de jemallocator. Ces deux crates sont identiques à l'exception de leurs noms. Pour les nouveaux projets, il est recommandé d'utiliser la version tikv-xxx.
Écosystème jemalloc
L'écosystème de support jemalloc comprend les crates suivants :
- tikv-jemalloc-sys : Compile et lie jemalloc, exposant ses liaisons C brutes.
- tikv-jemallocator : Fournit le type
Jemallocqui implémente les traitsGlobalAllocetAlloc. - tikv-jemalloc-ctl : Enveloppes de haut niveau pour les API de contrôle et d'introspection de jemalloc (la famille de fonctions
mallctl*()etMALLCTL NAMESPACE).
Utilisation
Ajout des Dépendances
Pour utiliser tikv-jemallocator, ajoutez-le comme dépendance :
Définition comme Allocateur Global
Pour définir tikv_jemallocator::Jemalloc comme allocateur global, ajoutez le code suivant à votre projet :
C'est tout ! Une fois cette variable statique définie, jemalloc sera utilisé pour toutes les allocations mémoire demandées par le code Rust au sein du même programme.
Avantages
jemalloc est une implémentation malloc à usage général qui se concentre sur :
- La réduction de la fragmentation mémoire
- L'évolutivité dans les scénarios à haute concurrence
- La fourniture de capacités riches d'introspection et de contrôle
Il est particulièrement utile dans les scénarios suivants :
- Applications de longue durée
- Charges de travail intensives en mémoire
- Services haute performance nécessitant une gestion fine de la mémoire
Notes de Compatibilité
jemalloc ne prend pas en charge l'environnement cible MSVC et n'est donc pas disponible lors de l'utilisation de la chaîne d'outils MSVC sous Windows. C'est pourquoi la condition cfg(not(target_env = "msvc")) est incluse dans le code d'exemple.