Jemallocator : Allocateur mémoire jemalloc pour Rust

tikv-jemallocatortikv-jemallocator
TIP

L'allocateur par défaut peut parfois ne pas libérer la mémoire de manière opportune. Nous recommandons d'utiliser jemallocator.

jemallocator est une bibliothèque liée à l'allocateur mémoire jemalloc. Il fournit le type unitaire Jemalloc, qui implémente l'API d'allocateur et peut être défini comme #[global_allocator].

tikv-jemallocator est le successeur du projet jemallocator. Ces deux crates sont identiques à l'exception de leur nom. Pour les nouveaux projets, il est recommandé d'utiliser la version tikv-xxx.

Écosystème jemalloc

L'écosystème de support jemalloc est composé des crates suivantes :

  • tikv-jemalloc-sys : compile et lie jemalloc, exposant ses liaisons C brutes.
  • tikv-jemallocator : fournit le type Jemalloc implémentant les traits GlobalAlloc et Alloc.
  • tikv-jemalloc-ctl : encapsulation haut niveau des API de contrôle et d'introspection de jemalloc (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"

Configuration 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;

Et voilà ! Une fois cette variable statique définie, jemalloc sera utilisé pour toutes les allocations mémoire demandées par le code Rust dans le 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 hautement concurrents
  • La fourniture de capacités riches d'introspection et de contrôle

Il est particulièrement utile dans les cas suivants :

  • Applications à exécution prolongée
  • Charges de travail intensives en mémoire
  • Services haute performance nécessitant une gestion mémoire fine

Notes de compatibilité

jemalloc ne prend pas en charge les environnements cibles MSVC, il n'est donc pas disponible sous Windows avec la chaîne d'outils MSVC. C'est pourquoi les exemples de code incluent la condition cfg(not(target_env = "msvc")).