http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54188
--- Comment #3 from Keith Thompson <Keith.S.Thompson at gmail dot com> 2012-08-06 19:28:37 UTC --- The results of the _Alignof operator (new in the 2011 ISO C standard) are the same as for the __alignof__ operator (not surprisingly). N1370 (C11 draft) 6.5.3.4 paragraph 3 says: The _Alignof operator yields the alignment requirement of its operand type. Richard Guenther: You say it's "Because the ABI says so". Do you have a reference to the ABI, particularly to a statement that a structure should have a smaller alignment than its member? You also say __alignof__ "does not return the minimum but the recommended alignment". That seems inconsistent with the use of the word "required" in C11. I just grabbed a copy of http://www.uclibc.org/docs/psABI-i386.pdf; is that the ABI you're referring to? Figure 3-1 covers alignment for scalar types. It says 8-byte floating-point has an alignment of 4 bytes, but it doesn't mention 8-byte integers. Furthermore, the following page says: Aggregates (structures and arrays) and unions assume the alignment of their most strictly aligned component. That seems inconsistent with the behavior of the following program: #include <stdio.h> int main(void) { printf("_Alignof(long long) = %d\n", (int)_Alignof(long long)); printf("_Alignof(struct {long long x;}) = %d\n", (int)_Alignof(struct {long long x;})); return 0; } whose output on my system, with gcc -std=c11 -pedantic c.c -o c && ./c is: _Alignof(long long) = 8 _Alignof(struct {long long x;}) = 4