网页设计品牌故事,seo免费培训,公司注册的公司,英文网站建设服务合同模板一、规则#xff1a;
操作系统制定对齐量#xff1a;
64位操作系统#xff0c;默认8Byte对齐
32位操作系统#xff0c;默认4Byte对齐
结构体对齐规则#xff1a;
1.结构体整体的大小#xff0c;需要是最大成员对齐量的整数倍
2.结构体中每一个成员的偏移量需要存在…一、规则
操作系统制定对齐量
64位操作系统默认8Byte对齐
32位操作系统默认4Byte对齐
结构体对齐规则
1.结构体整体的大小需要是最大成员对齐量的整数倍
2.结构体中每一个成员的偏移量需要存在其对齐量整数倍的位置
3.成员的对齐量成员本身的大小操作系统对齐量成员本身的大小操作系统指定对齐量
若成员大小8,就取8若成员大小8就取成员大小 二、数据类型
类型 所占空间大小
int 4B
short int 2B
long int 64: 8B 32:4B
long long 8B
float 4B
double 8B
*p 64:8B 32:4B
三 、实例默认都为64位
1.
typedef struct Test
{int a; char c;double b;long int p;
}T;
成员对齐量8B
解析其中最大的为long int为8B
大小24B 2.
typedef struct Stu
{char name[5]; int age; char sex; double score;
}S;
成员对齐量为8B
大小24B 3.
typedef struct A
{long int a; short b; int *p; float q;
}A;
成员对齐量8
大小32B 4.
struct C{char b;int a;short c;
};
成员对齐量4B
解析结构体最大的是int型为4B
成员本身的大小操作系统指定对齐量48所以成员对齐量4B
大小12B 5.结构体嵌套先计算内部结构体将内部的结构体对齐再计算外部
typedef struct Test{short a;struct {int b;double c;char d;}p;int e;
}Test;
成员对齐量8B
大小40B 6.
typedef struct Test {short a;struct {int b;double c[10];char d;};int e;
}Test;
成员变量8B
大小112B 7.指定对齐字节#pragma pack() ()中只能是2的幂次
#pragma pack(2) //指定二字节对齐()中只能是2的幂次
typedef struct
{char c; struct A{short a; int *b; char c; }p; long b; int a;
}T;
#pragma pack() //取消指定对齐
成员对齐量2B
大小26B