I don't really know a whole lot about this area, but I remember I was
surprised the first time I looked at this and discovered it was based
on pointers instead of offsets. I assumed there was some good reason
for it that I didn't know at the time (eg performance), but now I
doubt that. Your way seems much better to me. (It makes debugging
slightly easier too.) Have you tried it on a more RISC-y machine where
any performance loss might be more noticeable? I tried the change you
suggested on a PPC, and saw no speed difference.