就GCC而言(即使用GCC编译),以下两种方式的工作方式有何不同?
struct foo1 {
char a;
int b;
} __attribute__((__packed__, aligned(n) ));
并且:
#pragma pack(push, n)
struct foo2 {
char a;
int b;
};
#pragma pack(pop)
他们似乎表现不同:
foo1 f1;
foo2 f2;
int& i1 = f1.b; // ok
int& i2 = f2.b; // cannot bind packed field 'f2.foo2::b' to 'int&'
为什么一个会出错而另一个不会?它们的内存布局是否相同?