簡體   English   中英

了解C語言中的結構填充

[英]Understanding Structure Padding in C

通過數據對齊概念,我了解到int和floats應該存儲在可被4整除的地址(起始字節地址)中。據此,以下結構的大小為12

 typedef struct{
    char A;
    int B;
    float C;
}y;

我毫無疑問地了解了上面結構的大小現在我的疑問是關於下面結構的大小

typedef struct {
    double A;
    char B;
    char C;
}x;

x的大小為16。我的疑問是,可以使用2個字節分配使用的兩個字符,以便整個結構使用10個字節的數據,而其余2個字節在聲明時可以用於分配給另一個short int對?

但是編譯器使用16字節的數據並填充其他6個單元。 我不明白為什么如果在聲明它們時可以將它們用於其他變量,又浪費了另外6個單元格呢? 任何人都可以幫助我理解上面的概念嗎?(我假設int,float和double的大小分別為4,4,8字節。)

x的情況下,它包含一個double精度(以您的情況為例)的大小為8。這意味着,整個結構需要為該大小的倍數,才能正確對齊x的數組。

由於數組是連續分配的,因此數組中的每個成員緊隨內存中的前一個成員之后。 如果x大小為10,則對於一個數組,第二個元素的A成員的偏移量為10。為了正確對齊,每個數組成員都必須以最大元素的大小的倍數開始。 因此,該結構最后包含填充以完成此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM