C · Avançado · Inglês · Técnico
arena allocator
Alocador que reserva um grande bloco e entrega pedaços dele em sequência, sem free individual. Tudo é liberado de uma vez ao destruir ou reiniciar a arena.
Onde usar
Muito usado em compiladores e parsers, onde muitos objetos nascem e morrem juntos. Simplifica o gerenciamento de memória e é mais rápido que chamar malloc para cada pedaço.
Em código
struct arena { char *p; size_t u, cap; };
void *pega(struct arena *a, size_t n) {
if (a->cap - a->u < n) return NULL;
void *r = a->p + a->u;
a->u += n;
return r;
}Exemplos
The parser allocates every node from an arena allocator.
O parser aloca cada nó a partir de um arena allocator.
With an arena allocator, cleanup is a single call.
Com um arena allocator, a limpeza é uma única chamada.
Cuidado
Usar quando os objetos precisam ter tempos de vida diferentes, já que nada é liberado isoladamente.
Sinônimos
bump allocator, region allocator