边界对齐要求
struct ALIGN
{
char a;
int b;
char c;
};
那么这样的结构将会花费12个字节(因为int 类型是占用了4个字节的,char类型占用1个字节,所以边界对齐原则,需要12个字节)
但是我们实际用的是6个字节的大小,这样的话我们的存储利用率是比较低的.
所以我们的改进方法就是调整结构声明的顺序就可以了,让那些对边界要求最严格的成员首次出现,对边界要求最弱的成员最后出现.这种方式能够最大限度的减少因边界对齐而带来的空间损失.
一些关于空间的操作符
sizeof操作符能够得出一个结构的整体长度,包括因边界对齐而跳过的那些字节.
如果需要确定某个成员的实际位置,应该考虑边界对齐因素,可以使用offsetof宏(定义于stddef.h)
offsetof( type, member )
type 是结构的类型,member 是你需要的那个成员名.表达式的结果就是一个size_t值,表示这个指定成员开始存储的位置距离结构开始存储的位置偏移几个字节.