ExpertiDict

C · Avançado · Inglês · Técnico

arena allocator

/əˈɹi.nə ˈæ.lə.keɪ.tɚ/substantivo

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

Veja também

Todos os termos de C