Jemallocator: Alternativa de Alocador de Memória jemalloc para Rust
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
Jemallocque implementa as traitsGlobalAlloceAlloc. - 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*()eMALLCTL NAMESPACE).
Utilização
Adicionando Dependências
Para usar o tikv-jemallocator, adicione-o como dependência:
Configurando como Alocador Global
Para configurar tikv_jemallocator::Jemalloc como o alocador global, adicione o seguinte código ao seu projeto:
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.