union, struct, enum 的 大小區別
struct的最終大小考慮是最大的那個型別的倍數和每個都要對齊;
enum的大小考慮是最大的那個
enum是列舉,就是某個變數的值是能夠列舉的,比如,星期的話就每週1到7,月的話就1到12、而struct的話是對於某個變數是有很多資料型別構成一個總體的,比如學生這個變數,他需要學號,姓名,年齡,性別等等,這個時候就需要定義結構體了。而uninon的話呢,其中定義的變數都只佔一同塊記憶體。。。
對於結構體:考慮要對齊和佔用最大空間的元素所佔空間的倍數
對於聯合體:考慮是裡面所有型別資料佔用空間的倍數同時還要比最大的那個還要大的最小數,就是聯合體佔用的空間,注意陣列型別的處理!!!
typedef enum{
double a;
char b;
}UTYPE;
sizeof(UTYPE) 為 8
======================================================
struct A{
double d;
char ss;
char s;
};
sizeof(struct A) 為 結構中長度最大的變數的倍數(遵循記憶體對齊的原則),如上,double 的長度為 8, 則整個為 8*2 = 16, 因為 char 長度為1,兩個char 為2,仍小於8,故按8計算,若有9個char變數,則其中 8個char 合計為 8,剩餘一個不足8 按 8位元組計算。
按結構體中的變數的長度疊加,則大小為 8+(1+1+1+1+1+1+1+1)+1 = 17, 16 < 17 < 24, 則結構體的大小為 24
比如,
struct A{
double d;
char s1;
int i;
};
按結構體中的變數的長度疊加,則大小為 8+1+4 = 13, 8 < 13 < 16, 則結構體的大小為 16
======================================================
union A
{
double d;
int i;
};
聯合,則以定義中最大的資料型別的長度為準,此聯合的 size 為 8
備註: union 與 struct 的大小與其內部定義的函式無關!!!
相關文章
- struct和union和enum宣告的語法Struct
- Struct 和 Union有下列區別Struct
- Swift語言中class、struct、enum的聯絡與區別SwiftStruct
- C++ 結構體struct和共同體union的區別C++結構體Struct
- union all和union的區別
- union和union all的區別
- Union與Union All的區別
- 【SQL】UNION ALL 與UNION 的區別SQL
- sql中UNION和UNION ALL的區別SQL
- union 和union all 使用區別
- msyql jion 和 union 的區別
- Opensturt和Struct區別Struct
- mysql 中set和enum的區別MySql
- Union和Union All到底有什麼區別
- oracle知識整理(1) union和union all的區別,left join和right join的區別(各種join的區別)Oracle
- swift中Class和Struct的區別SwiftStruct
- C++中 struct 和 class 的區別C++Struct
- C++中struct 和 class的區別C++Struct
- C與C++中struct使用的區別C++Struct
- C語言:一個例子理解 union 和 structC語言Struct
- C# 中 Struct 和 Class 的區別總結C#Struct
- C++基礎(八)struct和class的區別C++Struct
- 字串大小的不同求法與區別字串
- c語言中的結構(struct)和聯合(union)簡介(轉)C語言Struct
- 微控制器,struct ,union定義標誌,節約RAMStruct
- ENUM列舉型別型別
- Thrift RPC 系列教程(5)—— 介面設計篇:struct & enum設計RPCStruct
- Swift之struct二進位制大小分析SwiftStruct
- Java - Enum 列舉型別Java型別
- struct結構體大小的計算(記憶體對齊)Struct結構體記憶體
- 如何使用enum資料型別?資料型別
- mysql之ENUM列舉型別MySql型別
- PHP 用 Enum 限定引數型別PHP型別
- [原創] sql mode與 enum 型別SQL型別
- Http 請求 header 大小寫有區別嗎?HTTPHeader
- Java列舉型別enum的詳解及使用Java型別
- sql中union和union all的用法SQL
- Oracle中的Union、Union All、Intersect、MinusOracle