關於sizeof的那些事

2021-09-26 04:34:46 字數 1103 閱讀 8049

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的值。

struct

s1 ;

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的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...