Honestly one of the more interesting things we're finding with Zig is just that there's no global allocator at all. Things that need to allocate conventionally take an allocator parameter and the application code decides what allocator to use
It does have the problem of needing to pass a helper param around and around in any wrappings APIs, which of course will bubble up if you realize late that some function deep in the call stack needs to allocate
But it's a really interesting design choice