欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
C語言結構體大小的計算超容易理解
[打印本頁]
作者:
misterchen
時間:
2019-5-31 11:56
標題:
C語言結構體大小的計算超容易理解
結構體的數據類型的有點多我們就不啰嗦了,直接來看相同數據結構體的幾種書寫的格式吧。
格式一:
01.struct tagPhone
02.{
03. char A;
04. int B;
05. short C;
06.}Phone;
格式二:
01.struct tagPhone
02.{
03. char A;
04. short C;
05. int B;
06.}Phone2;
格式三:
01.struct tagPhone3
02.{
03. char A;
04. char B[2];
05. char C[4];
06.}Phone3;
我們都知道,char類型占用1個字節,int型占用4個字節,short類型占用2個字節,long占用8個,double占用16個;
那么我們可能會犯一個錯誤就是直接1+4+2=7,該結構體占用7個字節。這是錯的。
以下我們簡單分析下:
計算結構體大小時需要考慮其內存布局,結構體在內存中存放是按單元存放的,每個單元多大取決于結構體中最大基本類型的大小。
對格式一:
以int型占用4個來作為倍數,因為A占用一個字節后,B放不下,所以開辟新的單元,然后開辟新的單元放C,所以格式一占用的字節數為:3*4=12;
同理對于格式二,
A后面還有三個字節,足夠C存放,所以C根著A后面存放,然后開辟新單元存放B數據。所以格式二占用的內存字節為2*4=8.
對于格式三:
上面結構計算大小,sizeof(Phone3) = 1 + 2 + 4 = 7, 其大小為結構體中個字段大小之和,這也是最節省空間的一種寫法。
總結:
第一種寫法,空間浪費嚴重,sizeof 計算大小與預期不一致,但是保持了每個字段的數據類型。這也是最常見的漫不經心的寫法,一般人很容易這樣寫;
第三種寫法,最節省空間的寫法,也是使用 sizeof 求大小與預期一樣的寫法,但是全部使用字節類型,丟失了字段本生的數據類型,不方便使用;
第二種寫法,介于第一種和第三種寫法之間,其空間上比較緊湊,同時又保持了結構體中字段的數據類型。
只要了解是這些寫法的差異性,可以視情況選用。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1