我正在阅读 GNU/GCC 的文档,然后我停在了 的描述处__attribute__ ((packed))
。它说:
已打包
packed 属性指定变量或结构字段应具有最小可能的对齐方式 - 每个变量一个字节,每个字段一位,除非您使用 aligned 属性指定更大的值。
这是一个结构体,其中字段 x 被打包,因此它紧跟在 a 之后:
struct foo { char a; int x[2] __attribute__ ((packed)); };
我想知道这个属性究竟如何工作,以及此代码是否:
struct bar
{
char a:1 __attribute__ ((packed));
};
将创建 1 位结构而不是 1 字节。
字节是最小的可寻址单位。因此,结构体只能占用整数字节,而不能占用小数字节。
位域(或更准确地说,包含位域的存储单元)中任何未使用的位都将成为填充。
因此,在您的示例中
struct bar
,结构体的大小仍为 1,其中使用了 1 位,未使用 7 位。