C ++: размер структуры с битовыми полями - PullRequest
0 голосов
/ 16 сентября 2011

Почему gcc возвращает 13 как размер следующего класса?Мне кажется, что мы должны получить 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 ]

12 голосов
/ 16 сентября 2011

Скорее всего, вы работаете на 64-битной платформе, и размер указателя составляет не 4, а 8 байтов. Просто сделайте sizeof на A * и распечатайте его.

6 голосов
/ 16 сентября 2011

Фактический размер структур с битовыми полями зависит от реализации, поэтому любой размер, который решит gcc, будет правильным.

...