我正在使用 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/