C语言中的字节对齐

参考文档

这篇文档写的比较清楚:http://www.linuxsong.org/2008/09/cc.html

关键的几个概念

1.数据类型自身的对齐值:
对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

对齐的规则

1) 有效对齐值N是最终用来决定数据存放地址方式的值
2) 结构体的成员变量要对齐排放,结构体本身也要根据自身的有效对齐值圆整(就是结构体成员变量占用总长度需要是对结构体有效对齐值的整数倍)


注意事项:
从奇数边界去访问unsignedshort型变量,是不合理的。
X86支持不对齐访问,只是效率比较低。对于MIPS、SPARC可能就是一个error,因为它们要求必须字节对齐。

原文地址:https://www.cnblogs.com/weichsel/p/1826302.html