If the current arena is restricted to the current thread, we can do First-in-Last-out allocations at the end (like a stack, but without the risk of stack overflow). Arena: header ppppp ppp pppp ......... ssss sss ssssss p = permanent allocations (normal arena allocation) s = temporary allocations, allocated in a stack like fashion from the end How to communicate this to called functions? - If we were using separate arena pointers, we could use the lowest bit in the arena pointer. This requires at least 16 bit alignment, so it does not work when the arena is derived from an object pointer, and the object has byte alignment (like strings and byte arrays).