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