Why doesn't gcc honor alignment requirements?
===

Consider the following code that prints the alignment requirement for a `double` and the effective alignment of a structure member of type `double`:

    #include <iostream>

    struct S { short x; double y; };

    int main() {
        S s;
        std::cout << __alignof(double) << ' ';
        std::cout << (char*)&s.y - (char*)&s << std::endl;
    }

([Run on codepag.org](http://codepad.org/W0PR4KIM))

I'm compiling this code with gcc on x86.

I was expecting this program to output `8 8`, however it prints `8 4` instead. **Why is that?**