结构体定义及结构体粒度(alignment)

结构体定义及结构体粒度(alignment)

#pragma pack(1)
typedef struct _STUDENT_INFORMATION_
{
	int Age;
	char v1;
	int v3;
	char v2;
}STUDENT_INFORMATION;

结构体的成员对齐值:

  • 结构体中当前数据成员类型的长度为M,指定的对齐值为N,实际对齐值为q = min(M, N)
  • 结构体中的数据成员,除了第一个是始终放在最开始的地方,其它数据成员的地址必须是它本身大小或对齐参数两者中较小的一个的倍数

对齐值对结构体整体大小的影响:

  • 如果结构体中的数据成员类型最大值为M,指定的对齐值为N,实际对齐值就是min(M, N)
  • 结构体大小必须能被对齐值整除

注意
1)当结构体中以数组作为成员时,计算对齐值是根据数组元素的长度,而不是数组的整体大小

2)当结构体中出现结构体类型的数据成员时,不会将嵌套的结构体类型的整体长度加入对齐值计算中,而是以嵌套定义的结构体使用的对齐值进行对齐

额外知识点

pragma pack(1)意为按一个字节对齐

pragma pack()即取消自定义对齐方式

若前面没有pragma pack 结构体里面内容定义应按字节数从大到小或从小到大

posted @ 2023-01-14 20:42  修竹Kirakira  阅读(71)  评论(0编辑  收藏  举报