GCC中的嵌套结构位域对齐

问题描述 投票:3回答:1

我正在使用g ++(GCC)4.7.2.20121109,我希望嵌套结构与位边界对齐。让我举个例子:

#include <iostream>

using namespace std;

typedef struct {
   unsigned int a : 1;
   unsigned int b : 7;
} __attribute__( ( packed ) ) myType1;

typedef struct {
   unsigned int a : 1;
   struct {
      unsigned int b : 7;
   } __attribute__( ( packed ) );
} __attribute__( ( packed ) ) myType2;

int main(void)
{
   cout << "sizeof( myType1 ) = " << sizeof( myType1 ) << endl;
   cout << "sizeof( myType2 ) = " << sizeof( myType2 ) << endl;
}

用“g ++ filename.cpp -o output”编译,给了我:

sizeof( myType1 ) = 1
sizeof( myType2 ) = 2

myType1具有我期望的大小,但myType2没有。我想sizeof(myType2)是1而不是2.有可能吗?

c++ gcc
1个回答
0
投票

匿名嵌套结构声明了一个新的类对象,因此其中的任何位域都将独立于外部类中的任何位域。在一个类中,位域被“打包到一些可寻址的分配单元”。此包装不会跨越类中的不同对象。

然后是语言规范中[class.bit]的这个:

类对象中位域的分配是实现定义的。位字段的对齐是实现定义的。

这意味着无论感觉如何,编译器都可以自由地使用位域(虽然这种行为确实需要记录)。

© www.soinside.com 2019 - 2024. All rights reserved.