簡體   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