前言
群里聊到了结构体对齐的话题,提到一个保留的概念
有的朋友不了解,于是我再来科普一下
实际上现在的编译器提供一个编译选项可以自动对齐结构体,纠结这个问题意义不大
但是养成良好的代码风格很有必要
正文
struct A{
char c1;
int i;
short s;
int j;
}a;
struct B{
int i;
int j;
short s;
char c1;
}b;
a的大小是16,b的大小是12
b就是对齐
实际工作中,大家习惯于将逻辑相关的变量放在靠近的位置,于是可以在空余位置设置保留作为扩展
这只是顺带的操作,用的也非常的少,不了解无伤大雅
struct A{
char c1;
char reserved1[3];
int i;
short s;
char reserved2[2];
int j;
}a;
总结
实际上现在的编译器提供一个编译选项可以自动对齐结构体,纠结这个问题意义不大
但是养成良好的代码风格很有必要