我使用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;
}
使用&#34; g ++ filename.cpp -o output&#34; 进行编译,给我:
sizeof( myType1 ) = 1
sizeof( myType2 ) = 2
myType1的大小是我期待的,但myType2还没有。我喜欢sizeof(myType2)是1而不是2.有可能吗?
答案 0 :(得分:0)
匿名嵌套结构声明了一个新的类对象,因此其中的任何位域都将独立于外部类中的任何位域。在一个类中,位域被打包到一些可寻址的分配单元中#34;。此包装不会跨越类中的不同对象。
然后在语言规范的[class.bit]中出现了这个:
类对象中位域的分配是实现定义的。位字段的对齐是实现定义的。
这意味着无论感觉如何,编译器都可以自由地使用位域(虽然这种行为确实需要记录)。