Union求sizeof
union u{
float a;
int b[5];
char c;
}
sizeof u;//20
結構體求sizeof
在默認情況下,爲了方便對結構體內元素的訪問和管理,當結構體內的元素長度都小於處理器的位數的時候,便以結構體內最長的數據元素爲對齊單位,也就是說,結構體的長度一定是最長的數據元素的整數倍。如果結構體內存在的長度大於處理器位數的,那麼就以處理器的位數爲對齊單位。結構體內類型相同的連續元素,將在練習的空間內,和數組一樣。多說無益,直接看程序。
struct {short a1;short a2;short a3;} A;
struct {short a1;long a2;} B;
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
大家猜測結果是什麼呢?
很多人以爲是:6和6
正確答案是:6和8
爲什麼呢?
結構體A中有三個short類型的變量,各自以2字節對齊,長度爲6字節。6是最大長度2的整數倍。故sizeof(A)=6;
結構體B中,long 佔用4個字節,short佔用2個字節,共6個字節,但是6不是4的整數倍,於是需要補空自己,增到8字節,即sizeof(B)=8
對類求sizeof
class Student{ public : bool isGirl; int age; bool beautiful; }; cout<<sizeof(Student);
結果爲:12
class Student{
public :
int age;
bool isGirl;
bool beautiful;
};
cout<<sizeof(Student);
class Student{
public :
int age;
static int schoolNum;
};
cout<<sizeof(Student)<<endl;