UNION大小問題

2021-09-27 21:39:30 字數 481 閱讀 5366

聯合體(union)

當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體(union);

1)聯合體是乙個結構;

2)它的所有成員相對於基位址的偏移量都為0;

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

4)其對齊方式要適合其中所有的成員;

下面舉例說明:

如聯合體

1 union u

2 ;s佔9位元組,n佔4位元組,d佔8位元組,因此其至少需9位元組的空間。然而其實際大小並不是9,

用運算子sizeof測試其大小為16.這是因為這裡存在位元組對齊的問題,9既不能被4整除,

也不能被8整除。因此補充位元組到16,這樣就符合所有成員的自身對齊了。

從這裡可以看出聯合體所佔的空間不僅取決於最寬成員,還跟所有成員有關係,

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

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

2)大小能被其包含的所有基本資料型別的大小所整除。

union和struct對齊大小問題

對齊就是要滿足儲存變數的起始位址與對齊大小餘數為0。對於union,分兩步 先算union對齊大小,對齊的大小是取決於union成員中位元組對齊最大的那個 再算union實際分配的空間,而分配給union的實際大小不僅要滿足是對齊大小的整數倍,同時要滿足實際大小不能小於最大成員的大小。如 union...

mysql大小問題

大小寫有關的引數介紹 lower case file system 該引數是用於描述data目錄所在的作業系統是否為大小寫敏感,該引數為bool型別,但無法修改。0 大小寫敏感 1 大小寫不敏感 在linux上的都是off或者0,在windows下是on或者0。0 大小寫敏感。unix,linux預...

關於類的大小問題

一直以來在各個論壇上都不時的見過一些關於類大小的討論,尤其是當涉及到虛繼承時,類的大小就變得更加撲朔迷離,每看完乙個帖子都覺得自己有所收穫,但當下次遇到類似的帖子時卻怎麼也想不起自己以前對此問題的記憶了,於是乎,乾脆勤快些一勞永逸地把他們記錄下來。純屬個人理解,難免有錯,我會定期更新這篇文章,修改其...