The current version uses an approach where we store offset=real_offset-1
and zero offset (or real_offset equal one) is a null pointer.
This is needed to support zero initialization.
* real_offset = pointer - this;
* pointer = real_offset + this;
* or pointer = offset + this + 1;
