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

use*_*536 0 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;
}
Run Code Online (Sandbox Code Playgroud)

./a.out 13

che*_*tan 12

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


K-b*_*llo 6

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