sizeof的用途是計算資料空間的位元組數
常見內建型別的sizeof
short
2int
4long
4float
4double
8char
1void*
4word
2dword
4enum
4類型別的sizeof
1.空類,sizeof值為1,編譯器隱含新增一位元組,告訴有這樣乙個空類。
2.不帶虛函式的類,sizeof值即為內部變數的sizeof值相加
3.帶虛函式的類,sizeof值=內部變數+乙個指向虛函式的指標(vptr)
4.子類的sizeof值
public繼承時=子類內部變數+父類的大小
virtual繼承時就比較複雜了,結果=虛基類的大小+子類內部變數(若子類存在虛函式還需加上vptr的值)
struct型別的sizeof
這裡涉及到了struct的對齊方式
structs1;structs2;
cout
<24cout<16
可以看出同樣是兩個char,乙個int,乙個double,但不同的對齊方式,導致他們的大小不同。
union與struct的空間計算遵循兩個原則:設最大成員型別所佔位元組數為x,例如常見的double為8
(1)整體空間是占用空間x的整數倍
(2)資料對齊原則----按順序放入大小為x的箱子中,一旦放滿或不夠放另起乙個箱子再放。
所以使用位域時,最好把float型別和double型別放到struct的開頭或結尾。
對於union與struct不同在於union的各成員變數共同占用乙個儲存空間,所以最大的成員變數即為它sizeof的值。
structs1 ;
struct
s2 ;
struct
s3 ;
struct
s4 ;
cout
<24 cout<24 cout<24 cout<4
關於sizeof的那些事
sizeof的用途是計算資料空間的位元組數 常見內建型別的sizeof short 2 int4 long 4 float 4 double 8 char 1 void 4 word 2 dword 4 enum 4 類型別的sizeof 1.空類,sizeof值為1,編譯器隱含新增一位元組,告訴有...
sizeof必須要知道的那些事
sizeof對於大多數人來說是即熟悉由陌生的。熟悉是指大家基本都用過,也知道sizeof是操作符不是函式 陌生就是指sizeof在計算自定義型別的時候,會涉及記憶體對齊方式,返回結果往往與我們想的大相徑庭。本文就是結合記憶體對齊方式來介紹如何求sizeof的返回值。先來做個測試,各位看官如能準確說出...
關於開始的那些事
人總是有惰性的,當然我自己深有體會。一直有個想法想寫寫自己的blog,但隨時間的推移,很久都沒付出行動。最近工作專案開始不那麼忙了,維護乙份自己的blog的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...