结构体大小的计算方法


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

结构体大小的计算方法:

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