This is a similar approach to what Jonathan Blow demo'd recently in his Jai language. He uses relative offsets from the location of the pointer instead of from the base of the region though. The advantage there is that you don't need to pass around a reference to the current heap, the disadvantage is that copying/moving is harder but that can be mitigated wit compiler support.