Jemallocator: Alternativa all'Allocatore di Memoria jemalloc per Rust
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
Jemallocche implementa i trattiGlobalAlloceAlloc. - tikv-jemalloc-ctl: Wrapper di alto livello per le API di controllo e introspezione jemalloc (la famiglia di funzioni
mallctl*()eMALLCTL NAMESPACE).
Utilizzo
Aggiunta Dipendenze
Per utilizzare tikv-jemallocator, aggiungerlo come dipendenza:
Impostazione come Allocatore Globale
Per impostare tikv_jemallocator::Jemalloc come allocatore globale, aggiungere il seguente codice al progetto:
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.