關于sizeof對結構類型的尺寸計算:
對結構整體求值結果與對結構成員分別求值的和不等;
這是由于編譯器對結構進行存儲空間分配時作內存對齊引起的;
struct thestruct{
double ddb;
char chb;
int intb;
};
這個結構在32位intel平臺用MS VC6編譯后求值為16;
在32位sparc平臺用SunStudio 的clearcase/" target="_blank" >cc編譯后也是16;
struct thestruct{
char chb;
double ddb;
int intb;
};
這個結構在32位intel平臺用MS VC6編譯后求值為24;
在32位sparc平臺用SunStudio 的cc編譯后也是24;
看來對齊規則是相同的;
我找了一個別人總結的對齊規則;
第一,就是結構中每個成員的存放地址相對于結構起始地址的偏移量,必須是該成員實際尺寸的倍數;
第二,就是結構體整體的尺寸必須是最大成員尺寸的倍數;
補進去的空間閑置不用;
//============================================================
sizeof對類的尺寸計算:
剛試過了;
這就和struct一樣,僅僅是成員函數要算一個指針,32位機上面增加4字節;
我只在sparc上試過,intel上沒試;
另外static類型的成員尺寸不算在內,對類的尺寸沒任何影響;
虛函數也是有二進制實現的,當然也算在內;今天被人忽悠得不自信了,竟然沒敢說這個事;
不過有件事還是郁悶,就是純虛函數;這種東西沒有二進制實現,我試驗的結果是它也不影響類尺寸;
但是純虛類本身不能實例化,算出來有啥用呢;