Jemallocator: Alocador de Memória jemalloc para Rust

tikv-jemallocatortikv-jemallocator
TIP


O alocador padrão pode, às vezes, não liberar memória de forma oportuna. Recomenda-se o uso do jemallocator.

O jemallocator é uma biblioteca que vincula o alocador de memória jemalloc, fornecendo o tipo de unidade Jemalloc, que implementa a API do alocador e pode ser definido como #[global_allocator].

O tikv-jemallocator é o sucessor do projeto jemallocator. Ambos os crates são idênticos, exceto pelo nome. Para novos projetos, recomenda-se a versão tikv-xxx.

Ecossistema jemalloc

O ecossistema de suporte ao jemalloc consiste nos seguintes crates:

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

Como Usar

Adicionar Dependências

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

[dependencies]  

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

Definir como Alocador Global

Para definir 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 definida essa variável estática, o jemalloc será usado para todas as alocações de memória solicitadas pelo código Rust no mesmo programa.

Vantagens

O jemalloc é uma implementação de malloc de propósito geral, focada 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 em:

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

Notas de Compatibilidade

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