uion聯合體佔用的字節計算

union overlay測試

{
char letter;
int number;
};
union overlay ua;
ANSI C下 這裏的ua 佔多少字節?怎麼計算?內存

聯合體(union)
當多個數據須要共享內存或者多個數據每次只取其一時,能夠利用聯合體(union);
1)聯合體是一個結構;

2)它的全部成員相對於基地址的偏移量都爲0;

3)此結構空間要大到足夠容納最"寬"的成員;

4)其對齊方式要適合其中全部的成員;

下面舉例說明:

如聯合體

1 union U
2 {
3 char s[9];
4 int n;
5 double d;
6 };

s佔9字節,n佔4字節,d佔8字節,所以其至少需9字節的空間。然而其實際大小並非9,

運算符sizeof測試其大小爲16.這是由於這裏存在字節對齊的問題,9既不能被4整除,

也不能被8整除。所以補充字節到16,這樣就符合全部成員的自身對齊了。

從這裏能夠看出聯合體所佔的空間不只取決於最寬成員,還跟全部成員有關係

即其大小必須知足兩個條件:

1)大小足夠容納最寬的成員;

2)大小能被其包含的全部基本數據類型的大小所整除。utf-8

相關文章
相關標籤/搜索