Jemallocator: Alternativa de Alocador de Memória jemalloc para Rust

Tip

O alocador padrão pode, por vezes, não liberar memória prontamente. Recomenda-se utilizar o jemallocator como alocador global para substituir o padrão.

O jemallocator é uma biblioteca vinculada ao alocador de memória jemalloc, fornecendo o tipo unitário Jemalloc que implementa a API de alocador e pode ser configurado como #[global_allocator].

O tikv-jemallocator é o projeto sucessor do jemallocator. Essas duas crates são idênticas, exceto pelos nomes. Para novos projetos, recomenda-se utilizar a versão tikv-xxx.

Ecossistema jemalloc

O ecossistema de suporte ao jemalloc consiste nas seguintes crates:

  • tikv-jemalloc-sys: Compila e vincula ao jemalloc, expondo suas ligações C brutas.
  • tikv-jemallocator: Fornece o tipo Jemalloc que implementa as traits GlobalAlloc e Alloc.
  • tikv-jemalloc-ctl: Wrappers de alto nível para as APIs de controle e introspecção do jemalloc (a família de funções mallctl*() e MALLCTL NAMESPACE).

Utilização

Adicionando Dependências

Para usar o tikv-jemallocator, adicione-o como dependência:

[dependencies]

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

Configurando como Alocador Global

Para configurar tikv_jemallocator::Jemalloc como o alocador global, adicione o seguinte código ao seu projeto:

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

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

Pronto! Uma vez que esta variável estática é definida, o jemalloc será utilizado para todas as alocações de memória solicitadas pelo código Rust dentro do mesmo programa.

Vantagens

O jemalloc é uma implementação de malloc de propósito geral que se concentra em:

  • Reduzir a fragmentação de memória
  • Escalabilidade em cenários de alta concorrência
  • Fornecer capacidades ricas de introspecção e controle

É particularmente útil nos seguintes cenários:

  • Aplicações de longa duração
  • Cargas de trabalho intensivas em memória
  • Serviços de alto desempenho que requerem gerenciamento de memória refinado

Notas de Compatibilidade

O jemalloc não suporta o ambiente de destino MSVC e, portanto, não está disponível ao usar a toolchain MSVC no Windows. É por isso que a condição cfg(not(target_env = "msvc")) está incluída no código de exemplo.