Jemallocator: Alternative Rust jemalloc-Speicherzuweiser
Der Standard-Speicherzuweiser gibt Speicher manchmal nicht umgehend frei. Es wird empfohlen, jemallocator als globalen Allokator zu verwenden, um den Standardzuweiser zu ersetzen.
jemallocator ist eine mit dem jemalloc-Speicherzuweiser verknüpfte Bibliothek, die den Jemalloc-Einheitstyp bereitstellt. Dieser implementiert die Allokator-API und kann als #[global_allocator] festgelegt werden.
tikv-jemallocator ist das Nachfolgeprojekt von jemallocator. Diese beiden Crates sind bis auf ihre Namen identisch. Für neue Projekte wird die tikv-xxx-Version empfohlen.
jemalloc-Ökosystem
Das jemalloc-Unterstützungsökosystem besteht aus folgenden Crates:
- tikv-jemalloc-sys: Baut jemalloc und verknüpft es, stellt rohe C-Bindings bereit.
- tikv-jemallocator: Stellt den
Jemalloc-Typ bereit, der dieGlobalAlloc- undAlloc-Traits implementiert. - tikv-jemalloc-ctl: Hochwertige Wrapper für jemalloc-Steuerungs- und Introspections-APIs (die
mallctl*()-Funktionsfamilie undMALLCTL NAMESPACE).
Verwendung
Abhängigkeiten hinzufügen
Um tikv-jemallocator zu verwenden, fügen Sie es als Abhängigkeit hinzu:
Als globalen Allokator festlegen
Um tikv_jemallocator::Jemalloc als globalen Allokator festzulegen, fügen Sie folgenden Code zu Ihrem Projekt hinzu:
Das war's! Sobald diese statische Variable definiert ist, wird jemalloc für alle Speicherzuweisungen verwendet, die von Rust-Code innerhalb desselben Programms angefordert werden.
Vorteile
jemalloc ist eine allgemeine malloc-Implementierung mit Fokus auf:
- Reduzierung von Speicherfragmentierung
- Skalierbarkeit in hochgradig nebenläufigen Szenarien
- Bereitstellung umfangreicher Introspections- und Steuerungsmöglichkeiten
Es ist besonders nützlich in folgenden Szenarien:
- Langlaufende Anwendungen
- Speicherintensive Arbeitslasten
- Hochleistungsdienste, die feingranulare Speicherverwaltung erfordern
Kompatibilitätshinweise
jemalloc unterstützt die MSVC-Zielumgebung nicht und ist daher bei Verwendung der MSVC-Toolchain unter Windows nicht verfügbar. Deshalb ist die cfg(not(target_env = "msvc"))-Bedingung im Beispielcode enthalten.