I\'m looking for a good (comprehensive) doc about memory alignment in C++, typical approaches, differences between compilers, and common pitfalls. Just to check if my understand
You can find an overview on wikipedia. More in depth on the IBM site: Data alignment: Straighten up and fly right
Imagine the case where addresses must be 16-byte aligned like for example the PS3. And then imagine that the shift == 1. This would then for sure be a non 16-byte aligned pointer which would not work on this machine.
Non-heap-allocated arrays of char
have no specific requirements on their alignment. So your buffer of a thousand characters could be on an odd offset. Trying to read an int
from that offset (reinterpreted as an int pointer obvious) would either result in poor performance or even a bus error on some hardware if the compiler doesn't split it up into separate read+bitmask operations.
Heap-allocated arrays of char
are guaranteed to be aligned suitably to store any object type, so this is always an option.
For non-heap based storage, use boost::aligned_storage
which ensures that the space is aligned properly for general use.