zabruk70 wrote:
On Sunday, 26 March 2017 at 06:45:13 UTC, ketmar wrote:
yes. you have a typo in second `writefln`: S1 instead of S2. ;-)
thank you.
another question, related to my first post:
why size of S2.b1 and S2.b2 still 3, not 4?
am i right: then align applied to members, compiler not change size of
members, just make padding, so CONTAINER size changes?
yes. compiler is not allowed to mess with data types of the known size. ;-)
and you are right: it doesn't have to. it just inserts dummy anonymous (and
unused) bytes into struct/union to satisfy alignment requirements.
if so (because size of S2.b1 and S2.b2 still is 3 in my code),
then adding align(1) outside of union must not change zise of union, but
size of some comainer more upper level.
nope, it changes size of the union itself. padding bytes *are* included in
union, so `myunion.sizeof` includes 'em too.
i.e. what compiler does (roughly) is inserting anonymous fields of the
appropriate size *into* the container. for "inner" aligning compiler
inserts anonymous fields *between* other fields. for "outer" aligning
compiler just appends anonymous field at the *end* of a data type, so data
type size will met align requirements.