La arena en Zig
Cinco reservas, cero frees: la arena devuelve todo en un solo deinit.
const std = @import("std");
pub fn main() !void {
// An arena frees everything at once instead of piecemeal.
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const alloc = arena.allocator();
var total: usize = 0;
for (0..5) |i| {
const chunk = try alloc.alloc(u8, (i + 1) * 10);
total += chunk.len;
}
std.debug.print("five chunks, {d} bytes, one deinit\n", .{total});
}
Cómo funciona
ArenaAllocator.initenvuelve un allocator de respaldo, aquí el de página.- El bucle reserva cinco trozos crecientes y no libera ninguno.
defer arena.deinit()suelta todo de una vez — el trato completo de la arena.
Palabras clave y builtins usados aquí
constdeferfnforpubtryu8usizevarvoid
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 411
- Tokens
- 116
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 107 segundos.
Paso 3 de 3 en Memoria; paso 21 de 27 en Fundamentos del lenguaje.