繁体   English   中英

结构填充对齐?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM