设为首页 加入收藏

TOP

结构体、类的成员对齐
2014-11-10 18:30:08 】 浏览:2218
Tags:结构 成员

  自然对齐


  为了保证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外部函数声明 下一篇在MFC里实现把背景去掉只显示圆形..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目