http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53937
--- Comment #3 from Krzysztof Gongolewski <don.delfin at gmail dot com> 2012-07-12 12:24:42 UTC --- But the compiler knows address of the struct at compilation time, it's hard-coded. So gcc knows that both struct and member are perfectly aligned. If you access only the struct, You can see that compiler uses knowledge that he knows the exact address, and fact that the structure is aligned and reads 32-bits in one instruction. To prove it, I compiled two additional functions: extern BasicStructPacked aa; void test_3() { *((int*)&STRUCT_REGULAR) = 0; } void test_4() { *((int*)&aa) = 0; } And compiler optimized the first function (test_3) as he knew the address and knew it is aligned. The second function (test_4) was not optimized as compiler didn't know address at compilation time. Output of compiler: (...) test_3: li 0,0 li 9,4096 stw 0,0(9) blr (...) test_4: lis 11,aa@ha li 0,0 la 9,aa@l(11) stb 0,aa@l(11) stb 0,1(9) stb 0,2(9) stb 0,3(9) blr (...)