结构体对齐方式:
1. #pragma pack[x],32系统默认值4,结构体元素最大长度,取三者最小值,作为每个元素对齐计算的值的倍数,并且总和是最小值的倍数!(假的)
于2015/12/26/修改
1. 数据成员对齐原则
结构或联合的数据成员,第一个数据成员放在offset为0的地方,以后每个成员按照#pragma pack(n)和成员本身值比较小那个进行对齐,offset是该值的整数倍
2. 整体对齐原则
在数据成员完成各自对齐之后,结构或联合本身也要对齐,对齐原则按照#pragma pack(n)指定的数值和结构最大数据成员长度中,比较小的那个值进行比较
3.嵌套结构体对齐原则
嵌套的内部结构体对齐原则是按照该结构体内部的最长元素与pragma指定的n最小值作为对齐的值
4.数组对齐原则
按照数组类型算,比如char a[3],实际上是按照1个字节对齐的,offset还是按照数组大小
5. 如果没有定义#pragma pack(),则按照自身的长度对齐
#include <stdio.h>
#include <string.h>
//#pragma pack(1)
struct demo
{
char x;
short y;
};
struct test
{
char x;
long y;
char z[9];
struct demo s1;
int a;
short b;
char c;
double e;
};
struct module
{
char a;
long double b;
};
int main(void)
{
printf("sizeof(test) is %d\n", sizeof(struct test));
}
参考:https://blog.csdn.net/mylinx/article/details/7007309