[英]structure padding alignment?
typedef struct structc_tag
{
char c;
double d;
int s;
} structc_t;
应用相同的分析,structc_t需要sizeof(char)+ 7字节填充+ sizeof(double)+ sizeof(int)= 1 + 7 + 8 + 4 = 20字节,但是sizeof(structc_t)将为24字节。了解对齐方式。有谁能帮助我?
如果我们全部写完,则您的结构如下所示:
typedef struct structc_tag
{
char c;
char pad1[7];
double d;
int s;
char pad2[4];
} structc_t;
pad2
是您不想要的。 之所以起作用,是因为编译器假设您可能希望将这些东西组成一个数组,在这种情况下,每个d
必须对齐,因此sizeof(structc_t)
为24。
您可以使用特定于编译器的扩展启用结构打包,如下所示:
typedef struct structc_tag
{
char c;
char pad1[7];
double d;
int s;
} __attribute__((packed)) structc_t;
现在需要pad1
(否则d
将立即跟在您不想要的c
后面)。 并且pad2
不再隐式添加,因此大小现在应该为20。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.