Allocators en Zig
Nada reserva memoria a tus espaldas: rentas bytes a un allocator, los devuelves, te auditan.
const std = @import("std");
pub fn main() !void {
// Nothing allocates without being handed an allocator.
var gpa = std.heap.DebugAllocator(.{}){};
defer _ = gpa.deinit(); // reports leaks at exit
const alloc = gpa.allocator();
const line = try alloc.alloc(u8, 24);
defer alloc.free(line);
@memset(line, '~');
std.debug.print("{s}\n", .{line});
std.debug.print("rented {d} bytes, returned on exit\n", .{line.len});
}
Cómo funciona
DebugAllocatorrastrea cada reserva; sudeinitreporta fugas al salir.alloc.alloc(u8, 24)renta un slice;defer alloc.free(line)lo devuelve.@memsetllena los bytes rentados antes de imprimirlos.
Palabras clave y builtins usados aquí
constdeferfnpubtryu8varvoid
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 419
- Tokens
- 119
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 110 segundos.
Paso 1 de 3 en Memoria; paso 19 de 27 en Fundamentos del lenguaje.