While is it already special, vector <bool> has to allocate in blocks of size 8. I also know some people are working on getting malloc to return the 'true size' of any allocated blocks, so if an allocated block would have introduced unavoidable waste, instead the vector usefully uses the space.
As we move to 64-bit OSes, memory space suddenly becomes (famous last words) larger than anyone will ever get close to filling, so it becomes much more reasonable to allocate large blocks of virtual memory and fill them whenever. Moving objects around is expensive, and in practice a waste of time, as we are not moving things because physical memory is limited, just from one virtual place to another!