“众所周知”,编译器为了提高访问效率,为对struct类型插入一些字节以达到对齐目的。(ps:在嵌入式面试中也常考察struct变量占用的空间大小,其实就是对齐的问题)
但有些场合,比如芯片提供的存储空间很紧张,不希望编译器进行这种“对齐”优化,可以通过使用“__attribute__((packed))”关键字来,来告诉编译器不要插入对齐字节。
__attribute__((packed))是GNU标准定义的,一般编译器都支持。
//一个简单的例子,
typedef struct myStrcuc{
char v1;
int v2;
char v3;
int v4;
}__attribute__((packed)) myStruc_s;
使用了__attribute__((packed))后,myStruc_s变量妥妥的只占10个字节(32位机上)。