"Gary Funck" <[EMAIL PROTECTED]> writes: > typedef struct sptr_struct > { > long unsigned int phase: 48; > short unsigned int thread: 16; > void *addr; > } sptr_t; > > is assigned a BLKmode rather a TImode, [...] > > Question: If we assume that a TImode would've been a more efficient mode > to represent the record type above, would it not have been acceptable for > the compiler to promote the alignment of this type to 128, given there > are no apparent restrictions otherwise, or are there other C conventions > at work that dictate otherwise?
Well, if you had: struct foo { sptr_struct s; void *p; } foo_struct; then sizeof (foo_struct) should be 16 + 8 == 24. If gcc bumped the alignment of sptr_struct to 128 bits, it would also have to bump the size of foo_struct to 32 bytes in order to maintain current alignment. If it didn't, a declaration like: struct foo x[2]; would lead to x[1].s not being correctly aligned. Richard