Jemallocator : Alternative d'Allocateur Mémoire jemalloc pour Rust

Tip

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 Jemalloc qui implémente les traits GlobalAlloc et Alloc.
  • tikv-jemalloc-ctl : Enveloppes de haut niveau pour les API de contrôle et d'introspection de jemalloc (la famille de fonctions mallctl*() et MALLCTL NAMESPACE).

Utilisation

Ajout des Dépendances

Pour utiliser tikv-jemallocator, ajoutez-le comme dépendance :

[dependencies]

[target.'cfg(not(target_env = "msvc"))'.dependencies]
tikv-jemallocator = "0.5"

Définition comme Allocateur Global

Pour définir tikv_jemallocator::Jemalloc comme allocateur global, ajoutez le code suivant à votre projet :

#[cfg(not(target_env = "msvc"))]
use tikv_jemallocator::Jemalloc;

#[cfg(not(target_env = "msvc"))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

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.