我正在使用 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。这可能吗?

最佳答案

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

然后在语言规范中有来自 [class.bit] 的内容:



这意味着编译器可以随意处理位域(尽管这种行为确实需要记录)。

关于c++ - GCC 中的嵌套结构位域对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47994219/

10-16 03:52