Jemallocator: Alternativa all'Allocatore di Memoria jemalloc per Rust

Tip

L'allocatore predefinito potrebbe occasionalmente non rilasciare tempestivamente la memoria. Si consiglia di utilizzare jemallocator come allocatore globale per sostituire quello predefinito.

jemallocator è una libreria collegata all'allocatore di memoria jemalloc, che fornisce il tipo unitario Jemalloc implementante l'API allocatore e configurabile come #[global_allocator].

tikv-jemallocator è il progetto successore di jemallocator. Queste due crate sono identiche eccetto per il nome. Per nuovi progetti, si raccomanda di utilizzare la versione tikv-xxx.

Ecosistema jemalloc

L'ecosistema di supporto jemalloc comprende le seguenti crate:

  • tikv-jemalloc-sys: Compila e collega jemalloc, esponendone le binding C grezze.
  • tikv-jemallocator: Fornisce il tipo Jemalloc che implementa i tratti GlobalAlloc e Alloc.
  • tikv-jemalloc-ctl: Wrapper di alto livello per le API di controllo e introspezione jemalloc (la famiglia di funzioni mallctl*() e MALLCTL NAMESPACE).

Utilizzo

Aggiunta Dipendenze

Per utilizzare tikv-jemallocator, aggiungerlo come dipendenza:

[dependencies]

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

Impostazione come Allocatore Globale

Per impostare tikv_jemallocator::Jemalloc come allocatore globale, aggiungere il seguente codice al progetto:

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

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

Fatto! Una volta definita questa variabile statica, jemalloc verrà utilizzato per tutte le allocazioni di memoria richieste dal codice Rust all'interno dello stesso programma.

Vantaggi

jemalloc è un'implementazione malloc generica che si concentra su:

  • Riduzione della frammentazione della memoria
  • Scalabilità in scenari ad alta concorrenza
  • Fornitura di ricche capacità di introspezione e controllo

Risulta particolarmente utile nei seguenti scenari:

  • Applicazioni a esecuzione prolungata
  • Carichi di lavoro intensivi per la memoria
  • Servizi ad alte prestazioni che richiedono gestione granulare della memoria

Note di Compatibilità

jemalloc non supporta l'ambiente target MSVC e pertanto non è disponibile quando si utilizza la toolchain MSVC su Windows. Questo spiega la condizione cfg(not(target_env = "msvc")) inclusa nel codice di esempio.