Jemallocator: аллокатор памяти jemalloc для Rust

tikv-jemallocatortikv-jemallocator
TIP

Стандартный аллокатор иногда может не освобождать память своевременно, поэтому рекомендуется использовать jemallocator

jemallocator — это библиотека, которая связывается с аллокатором памяти jemalloc и предоставляет тип Jemalloc, реализующий API аллокатора. Этот тип можно установить в качестве #[global_allocator].

tikv-jemallocator является преемником jemallocator. Эти крейты идентичны за исключением названия. Для новых проектов рекомендуется использовать версию с префиксом tikv-.

Экосистема jemalloc

Экосистема jemalloc включает следующие крейты:

  • tikv-jemalloc-sys: собирает и линкуется с jemalloc, предоставляя сырые C-биндинги.
  • tikv-jemallocator: предоставляет тип Jemalloc, реализующий трейты GlobalAlloc и Alloc.
  • tikv-jemalloc-ctl: высокоуровневая обёртка для API управления и интроспекции jemalloc (семейство функций mallctl*() и пространство имён MALLCTL).

Использование

Добавление зависимости

Чтобы использовать tikv-jemallocator, добавьте его в зависимости:

[dependencies]

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

Установка глобального аллокатора

Чтобы установить tikv_jemallocator::Jemalloc в качестве глобального аллокатора, добавьте следующий код в ваш проект:

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

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

Всё! После определения этой статической переменной jemalloc будет использоваться для всех выделений памяти, запрошенных кодом Rust в этой программе.

Преимущества

jemalloc — это реализация malloc общего назначения, которая фокусируется на:

  • Уменьшении фрагментации памяти
  • Масштабируемости в высоконагруженных сценариях
  • Предоставлении богатых возможностей интроспекции и управления

Особенно полезен в следующих случаях:

  • Долгоживущие приложения
  • Рабочие нагрузки, интенсивно использующие память
  • Высокопроизводительные сервисы, требующие детального управления памятью

Примечания по совместимости

jemalloc не поддерживает среду MSVC, поэтому недоступен при использовании инструментария MSVC в Windows. Именно поэтому в примерах кода используется условие cfg(not(target_env = "msvc")).