结构体、类的成员对齐

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  自然对齐

  为了保证CPU的运算稳定和效率,要求基本数据类型在内存中的存储地址必须自然对齐。所谓自然对齐,就是基本数据类型的变量不能简单的存储于内存中的任意地址处,它们的起始地址必须能够被它们的大小整除。

  例如,在32位平台下,int和指针类型的变量的地址应该能够被4整除。

  结构体变量的自然对齐

  对于复合类型(一般指结构体和类)的对象,如果它的起始地址能够满足其中要求最严格(最高)的那个数据成员的自然对齐要求,那么它就是自然对齐的。

  什么是“自然对齐要求最严格”呢?距离来说吧,double、int、bool所占的空间依次为8、4、1,它们的对齐严格性依次降低。

  结构体内部成员变量的对齐方式,按照其sizeof大小最大的基本类型变量的对齐要求进行对齐。必要的时候,对象的末尾还要进行字节填充。

  总结:结构体的长度一定是其最长的成员变量大小的整数倍。

  例子

  view sourceprint?01 struct{         //sizeof 8,按4字节对齐,末尾填充2字节

  02     long a1;

  03     short a2;

  04 }B;

  05

  06 struct STest        //sizeof 16,按8字节对齐,末尾填充7字节

  07 {

  08     double b;

  09     char a;

  10 };

  11

  12 struct ThreeeShort{ //sizeof 10,按2字节对齐,末尾填充1字节

  13     short a;

  14     short b;

  15     short c;

  16     short d;

  17     char ch;

  18 };

  编辑特别推荐:

  Dll导出函数引用Dll外部函数声明

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答