A interface de alocação
Um único contrato para todas as fontes de memória.
A interface de alocação é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Zig Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Zig Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
One Common Type
Every allocator in Zig is handed around as a single type, std.mem.Allocator. Your code talks to that one interface, never a concrete backend.
const Allocator = std.mem.Allocator;An Interface, Not a Class
std.mem.Allocator is a small interface: a pointer plus a table of functions. It describes what an allocator can do, not which one you use.
Many Backends, One Shape
A page allocator, an arena, or a test allocator all expose the same shape. Swapping one for another needs no change to calling code.
Get a Real Allocator
You obtain a concrete allocator, then take its .allocator() handle to pass around as the generic std.mem.Allocator type.
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = gpa.allocator();Pass It Down
Once you hold an allocator, you pass that one value into any function that needs memory. The whole program can share a single source.
try doWork(a);The Page Allocator
std.heap.page_allocator asks the OS directly for memory. It is simple but coarse, so it suits big or long-lived blocks, not tiny ones.
const a = std.heap.page_allocator;GeneralPurposeAllocator
The GeneralPurposeAllocator is the everyday choice in debug builds. It tracks every block and reports leaks and double-frees for you.
Why an Interface Helps
Coding against the interface means your function works with any allocator. The same code runs in tests, on bare metal, or in a server.
Functions Just Ask
A function does not care which allocator it got. It simply calls methods like alloc and free on the std.mem.Allocator it was given.
const buf = try a.alloc(u8, 16);No Global Allocator
Zig has no single global heap. You decide which allocator each part of your program uses, keeping memory sources visible and local.
Test with a Different One
In tests you pass std.testing.allocator instead. Same code, but now leaks fail the test, proving the interface pays off. ✅
Quick Check
Think about what type all Zig allocators share.
Recap
You learned that std.mem.Allocator is one interface over many backends, so code that asks for memory works with any allocator you supply. 🎯
Perguntas Frequentes
A aula “A interface de alocação” é grátis?
Sim — o texto completo de “A interface de alocação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Zig Academy, atualize para CoddyKit PRO. O curso de Zig Academy inclui 4 aulas no total.
O que vou aprender em “A interface de alocação”?
Um único contrato para todas as fontes de memória. Você pratica Zig Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Zig Academy?
Nenhuma experiência prévia é necessária. Zig Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “A interface de alocação”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Zig Academy?
Sim. Cada aula de Zig Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que Zig não tem alocações ocultas
- A interface de alocação
- alloc, free, create, destroy
- Listas dinâmicas com ArrayList