C ++:带有位字段的struct的sizeof

时间:2011-09-15 21:02:52

标签: c++ sizeof

为什么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

2 个答案:

答案 0 :(得分:12)

您很可能在64位平台上运行,并且指针的大小不是4而是8个字节。只需在A *上做一个sizeof并打印出来。

答案 1 :(得分:6)

具有位域的结构的实际大小取决于实现,因此无论gcc决定它的大小都是正确的。

相关问题