Jemallocator: Alternativa de Asignador de Memoria jemalloc para Rust
El asignador por defecto puede no liberar memoria de forma inmediata en ocasiones. Se recomienda utilizar jemallocator como asignador global para reemplazar el predeterminado.
jemallocator es una biblioteca vinculada con el asignador de memoria jemalloc, que proporciona el tipo unitario Jemalloc que implementa la API de asignador y puede configurarse como #[global_allocator].
tikv-jemallocator es el proyecto sucesor de jemallocator. Ambos crates son idénticos excepto por sus nombres. Para nuevos proyectos, se recomienda utilizar la versión tikv-xxx.
Ecosistema jemalloc
El ecosistema de soporte de jemalloc consta de los siguientes crates:
- tikv-jemalloc-sys: Compila y enlaza con jemalloc, exponiendo sus enlaces C directos.
- tikv-jemallocator: Proporciona el tipo
Jemallocque implementa los traitsGlobalAllocyAlloc. - tikv-jemalloc-ctl: Contenedores de alto nivel para las APIs de control e introspección de jemalloc (la familia de funciones
mallctl*()yMALLCTL NAMESPACE).
Uso
Agregar Dependencias
Para utilizar tikv-jemallocator, añádelo como dependencia:
Configurar como Asignador Global
Para establecer tikv_jemallocator::Jemalloc como asignador global, añade el siguiente código a tu proyecto:
¡Listo! Una vez definida esta variable estática, jemalloc se utilizará para todas las asignaciones de memoria solicitadas por el código Rust dentro del mismo programa.
Ventajas
jemalloc es una implementación de propósito general de malloc que se enfoca en:
- Reducir la fragmentación de memoria
- Escalabilidad en escenarios de alta concurrencia
- Proporcionar capacidades ricas de introspección y control
Es particularmente útil en los siguientes escenarios:
- Aplicaciones de larga duración
- Cargas de trabajo intensivas en memoria
- Servicios de alto rendimiento que requieren gestión granular de memoria
Notas de Compatibilidad
jemalloc no soporta el entorno objetivo MSVC, por lo tanto no está disponible cuando se utiliza la cadena de herramientas MSVC en Windows. Esta es la razón por la que se incluye la condición cfg(not(target_env = "msvc")) en el código de ejemplo.