Christopher Wright wrote:
Frits van Bommel wrote:
But the union's alignment needs to be sufficient for all members, so
it depends on the maximum alignment of all members.
Or the least common multiple, assuming that align accepts arguments that
are not powers of 2.
I have never seen "alignment" used to describe addresses at a multiple of
anything but a power of two.
In fact, common object file formats (That I know of: ELF and LLVM bitcode)
enforce this by only allowing alignments to be specified as powers of two. ELF
does this by storing the log of the alignment instead of the alignment itself;
LLVM currently encodes the full value for backward compatibility but asserts if
this isn't a power of two (or zero) and IIRC they plan to switch to log-storage
for LLVM 3.0 if and when it comes out.