首页 > 其他 > 详细

结构体大小的计算方法

时间:2020-04-12 22:36:24      阅读:56      评论:0      收藏:0      [点我收藏+]

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

结构体大小的计算方法:

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 };

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

 

结构体大小的计算方法

原文:https://www.cnblogs.com/huanian/p/12687850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!