typestar

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

  1. ArenaAllocator.init envuelve un allocator de respaldo, aquí el de página.
  2. El bucle reserva cinco trozos crecientes y no libera ninguno.
  3. defer arena.deinit() suelta todo de una vez — el trato completo de la arena.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Memoria; paso 21 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →