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