#include<stdio.h>
#pragma pack(show) // 8 默认对齐模数
//对于自定义数据类型,内存对齐规则如下:
//1. 从第一个属性开始,偏移量为0
//2. 从第二个属性开始,地址要放在该类型的整数倍与对齐模数比中的最小值的整数倍上
//3. 所有的属性都计算结束后,整体再做二次对齐,整体需要放在属性中最大类型与对齐模数比中最小值的整数倍上,20不是8的倍数,24是8的倍数,所以最终结果是24
struct Person
{
int a; //0- 3
char b;//4-7 1和8比较,最小值是1,所以放在1的整数倍上,4就是1的整数倍
double c;//8 - 15
float d; // 16-19
};
//Person2所占字节大小是40,Person2中最大类型(标准数据类型)与对齐模数中最小值的整数倍,40是8的整数倍,所以就是40
struct Person2 {
char e; // 0- 7
struct Person f;//8-31
double g; //32-39
};
void test01() {
printf("Person结构体所占字节数:%d\n",sizeof(struct Person));
}
void test02() {
printf("Person2结构体所占字节数:%d\n",sizeof(struct Person2));
}
int main(void) {
//test01();
test02();
return 0;
}
结构体所占字节的计算
最新推荐文章于 2023-01-11 23:12:33 发布