There are two issues:


most allocators store some additional data prior to the start of the block (typically block size and a couple of pointers)
there are usually alignment requirements, e.g. Linux typically allocates to at least an 8 byte boundary, OS X allocates to at least a 16 byte boundary


So you'll nearly always get some kind of gap between successive allocations.

Of course you should never rely on any specific behaviour for something like this, where the implementation is free to do as it pleases.

C++ new memory allocation fragmentation
Is the following a correct past perfect sentence?


  I would have killed the snake if I had hit him hard with a stick.

