attribute ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关。
typedef struct {
double a;
double b;
} __attribute__((packed)) dnum; //不对齐,结构体长度就是各个变量长度之和
struct student
{
char name[7];
uint32_t id;
char subject[5];
} __attribute__ ((aligned(4))); //基于4字节进行对齐