結構體大小的計算方法


******************************************************************************************

結構體大小的計算方法:

1.結構體成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍)。

2.結構體大小必須是所有成員大小的整數倍。

******************************************************************************************

1.簡單結構體,sizeof(s1)=8

1 struct s1
2 {
3     char ch1;//1 4     char ch2;//2 5     int i;//8 6 };

2.簡單結構體(數據的順序改變了),sizeof(s2)=12

1 struct s2
2 {
3     char ch1;//1 4     int i;//8 5     char ch2;//12 6 };

3.成員包含數組的結構體,sizeof(s3)=20

1 struct s3{
2     char ch;//1 3     int i;//8 4     char str[10];//20 5 };

4.成員包含結構體的結構體,sizeof(s4)=20

 1 struct s4
 2 {
 3     char ch;//1  4     int i;//8  5     struct s
 6     {
 7         char ch1;//12  8         int j;//16  9     };
10     
11     float f;//20 12 };

5.成員包含聯合體的結構體,sizeof(s5)=12

 1 struct s5
 2 {
 3     char ch;//1
 4     int i;//8
 5     union    //聯合體大小就是成員中最大類型的大小  //12
 6     {
 7         char ch1;
 8         int j;
 9     };
10 };

6.指定對齊值

(1)對齊值小於結構體成員最大值

1 #pragma pack(4)  //指定向4對齊,最大是8
2 
3 struct s6
4 {
5     char ch;//1 6     int i;//8 7     float f;//12 8     double d;//20 9 };

(2)對齊值大與結構體成員最大值

1 1 #pragma pack(10)  //指定向10對齊,最大是8
2 2 
3 3 struct s7
4 4 {
5 5     char ch;//1 6 6     int i;//8 7 7     float f;//12 8 8     double d;//24 9 9 };

******************************************************************************************

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM