union, struct, enum 的 大小區別

qq_30100389發表於2015-11-28
	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 的大小與其內部定義的函式無關!!!


相關文章