Suppose sizeof(GVMemoryBlock) == 3 bytes. Further, assume the preferred TD-alignment is on 4-byte boundaries. Finally, for sake of argument, assume RawMemory points to address 4. Then Create(GV, TD) returns 7, a non-aligned address with respect to the preferred TD-alignment.
Also, if anyone happens to know, why is the empty ~GVMemoryBlock()destructor explicitly called in the deleted() callback? The last comment left there seems to indicate someone else before me was also puzzled by this :)