December 29, 2025
No malloc, no mercy
Static Allocation with Zig
Zig dev locks memory at launch; fans cheer, skeptics squint
TLDR: A Zig dev built a key/value server that preallocates all memory at startup for predictability. Comments split between purists praising discipline and pragmatists preferring some flexibility, with links and jokes turning it into a lively debate about performance, simplicity, and real‑world trade‑offs.
A Zig developer building a mini Redis-style server announces a bold rule: lock down all memory at startup and never ask the computer for more. Cue the drama. Supporters chant TigerBeetle’s TigerStyle mantra—“all memory at startup”—as a path to speed and fewer bugs, while curious readers ask, “So… how much memory do you bet the farm on?” One commenter dropped a helpful deep dive from a TigerBeetle dev (link), and another bragged they’re doing the same move with NATS (a message system), because Zig makes this pattern feel natural.
Then the hot takes landed. A theory fan argued this approach is “the only kind of program you can truly reason about,” even flirting with the idea that it’s not fully Turing-complete—translation: less chaos, more math. Pragmatists pushed back with a “lazy” version: pre-size the big stuff, but keep some wiggle room for tiny bits. Meanwhile, the jokes poured in: “no malloc, no mercy,” “no memory after midnight,” and “preallocate your anxiety.” The original post’s real charm? Explaining the trade-offs in plain English—like how io_uring (Linux’s fast input/output) needs careful bookkeeping—and inviting readers to wrestle with limits. The crowd loved the transparency, even as they argued over purity vs practicality.
Key Points
- •The author is building “kv,” a Redis-compatible key/value server in Zig with a limited command set.
- •The project adopts static memory allocation at startup, avoiding dynamic allocation after initialization.
- •Design planning includes determining memory limits for concurrent connections, per-connection buffers, data volume, and response sizes.
- •Zig’s explicit memory model and std.mem.Allocator interface support implementing static allocation strategies.
- •Connection handling uses io_uring with preallocated pools for connection structures and I/O buffers, including a per-connection completion.