为什么gcc将返回13作为以下类的sizeof? 在我看来,我们应该得到e(4字节)+ d(4字节)+ 1字节(对于a和b)= 9字节。如果它是对齐的,那么大多数32位系统不是在8字节边界上对齐的吗?
class A {
unsigned char a:1;
unsigned char b:4;
unsigned int d;
A* e;
} __attribute__((__packed__));
int main( int argc, char *argv[] )
{
cout << sizeof(A) << endl;
}
./ a.out的 13
答案 0 :(得分:12)
您很可能在64位平台上运行,并且指针的大小不是4而是8个字节。只需在A *上做一个sizeof并打印出来。
答案 1 :(得分:6)
具有位域的结构的实际大小取决于实现,因此无论gcc决定它的大小都是正确的。