Jemallocator: Rust jemalloc Speicherzuweiser

tikv-jemallocatortikv-jemallocator
TIP

Der Standardzuweiser gibt manchmal Speicher nicht rechtzeitig frei. Die Verwendung von jemallocator wird empfohlen.

jemallocator ist eine Bibliothek, die mit dem jemalloc-Speicherzuweiser verknüpft ist. Sie stellt den Jemalloc-Typ bereit, der die Allokator-API implementiert und als #[global_allocator] festgelegt werden kann.

tikv-jemallocator ist das Nachfolgeprojekt von jemallocator. Abgesehen vom Namen sind beide Crates identisch. Für neue Projekte wird die tikv-xxx-Version empfohlen.

jemalloc-Ökosystem

Das jemalloc-Ökosystem besteht aus folgenden Crates:

  • tikv-jemalloc-sys: Baut und verknüpft jemalloc und stellt die rohen C-Bindungen bereit.
  • tikv-jemallocator: Stellt den Jemalloc-Typ bereit, der die GlobalAlloc- und Alloc-Traits implementiert.
  • tikv-jemalloc-ctl: Hochwertige Abstraktion der jemalloc-Steuerungs- und Introspections-APIs (die mallctl*()-Funktionsfamilie und der MALLCTL NAMESPACE).

Verwendung

Abhängigkeiten hinzufügen

Um tikv-jemallocator zu verwenden, fügen Sie es als Abhängigkeit hinzu:

[dependencies]

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

Als globalen Allokator festlegen

Um tikv_jemallocator::Jemalloc als globalen Allokator festzulegen, fügen Sie folgenden Code zu Ihrem Projekt hinzu:

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

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

Das war's! Sobald diese statische Variable definiert ist, wird jemalloc für alle Speicherzuweisungen verwendet, die vom Rust-Code im selben Programm angefordert werden.

Vorteile

jemalloc ist eine allgemeine malloc-Implementierung mit Fokus auf:

  • Reduzierung von Speicherfragmentierung
  • Skalierbarkeit in hochgradig parallelen Szenarien
  • Bereitstellung umfangreicher Introspections- und Steuerungsmöglichkeiten

Besonders nützlich ist es in folgenden Fällen:

  • Lang laufende Anwendungen
  • Speicherintensive Workloads
  • Hochleistungsdienste mit feingranularer Speicherverwaltung

Kompatibilitätshinweise

jemalloc unterstützt die MSVC-Zielumgebung nicht und ist daher unter Windows mit dem MSVC-Toolchain nicht verfügbar. Deshalb wird in den Beispielen die Bedingung cfg(not(target_env = "msvc")) verwendet.