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:
void
has the same alignment requirement as a pointer to char
.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 alignas
).