#define ARENA_ALIGN 8
This is unportable. You really need to pass the required alignment to the allocation function.
This is unportable. You really need to pass the required alignment to the allocation function.
And I might be wrong, but even if you do accept a required alignment `align`, I think it's impossible in portable C to align a pointer `p` to it, unless you assume something not-strictly-portable about `(uintptr_t)p`, or `align` is less than some predetermined alignment that you used to allocate the char array.
What's not strictly portable about it?
padding = -(uintptr_t)p & (align - 1)
The only assumption here is that align is a power of 2, which is guaranteed if it's the result of an alignof().