C語言中結構體和共同體在記憶體中占用位元組數

2021-07-11 13:18:04 字數 855 閱讀 2361

對於共同體來說,其在記憶體中所佔位元組數為共同體中長度最大的元素所占用的位元組數。

對於結構體來說,必須遵循結構體對齊的原則。

對齊原則:一般來說,結構體的對齊規則是先按資料型別自身進行對齊,然後再按整個結構體進行對齊,對齊值必須是2的冪,比如1,2, 4, 8, 16。如果乙個型別按n位元組對齊,那麼該型別的變數起始位址必須是n的倍數。資料自身的對齊值通常就是資料型別所佔的空間大小,比如int型別佔四個位元組,那麼它的對齊值就是4。整個結構體的對齊值一般是結構體中最大資料型別所佔的空間。

根據這一原則,當data中只有uint8_t這乙個元素時,結構體所佔位元組為1。當其中有兩個uint8_t元素時,結構體所佔位元組數為2。當其中出現第三個元素uint32_t,此時uint32_t所佔位元組為4,所以結構體的對齊值必須是4的倍數。所以從uint8_t到uint32_t之間必須補齊兩個位元組,所以最終結構體的位元組為8。

那麼,有沒有什麼辦法來介紹結構體所佔位元組數呢?答案是有的。

可以看到,在加入了

__attribute__((__packed__))
命令之後,實現了對結構體的壓縮。

C 結構體和共同體

一 定義結構體三種方法 1.先宣告結構體型別再定義變數名。2.在宣告型別的同時定義變數。3.直接定義結構體型別變數。struct student 二 共同體 引用方式 只有先定義了共同體的變數才能引用它。而且不能引用共同體變數,只能引用共同體變數中的成員 union teacherteacher 下...

結構體和共同體

結構體適用用是將不同型別的資料成員組合到一起,適用於關係緊密和邏輯相關的資料進行處理 與共同體相比較而言,共同體雖然也能表示不同型別資料的資料集合,但是其資料成員的情形是互斥的,每一時刻只有乙個資料成員起作用,例如乙個人的婚姻狀況,未婚 已婚 離婚,這三個狀態在某一時期只能存在一種情況。struct...

結構體和共同體

結構體 定義多個不同型別的成員變數組合在一起,以實現複雜的資料結構。格式 struct 標籤名 變數1 變數2 或者 typedef struct 標籤名 示例 struct books book 當兩個結構體互相包含,則需要對其中乙個結構體進行宣告 宣告 struct b 結構體a指向結構體b s...