结构体大小的计算方法

Posted huanian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体大小的计算方法相关的知识,希望对你有一定的参考价值。

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

结构体大小的计算方法:

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

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

 

以上是关于结构体大小的计算方法的主要内容,如果未能解决你的问题,请参考以下文章

结构体大小的计算方法

结构体大小的计算方法

结构体大小的计算方法

sizeof(结构体) = ?

计算结构体的大小

结构体对齐计算方式