All types in C++ have an alignment. This is a restriction on the memory address that objects of that type can be created within. A memory address is valid for an object's creation if dividing that address by the object's alignment is a whole number.
Type alignments are always a power of two (including 1).
The standard guarantees the following:
voidhas the same alignment requirement as a pointer to
Note that while alignment exists in C++03, it was not until C++11 that it became possible to query alignment (using
alignof) and control alignment (using