结构体大小的计算方法
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 };
******************************************************************************************
以上是关于结构体大小的计算方法的主要内容,如果未能解决你的问题,请参考以下文章