设为首页 加入收藏

TOP

字节对齐问题
2014-10-21 22:30:02 来源: 作者: 【 】 浏览:61
Tags:字节 问题

  规则:


  1 、数据成员对齐规则:结构 (struct)( 或联合 (union)) 的数据成员,第一个数据成员放在 offset 为 0 的地方,以后每个数据成员的对齐按照 #pragma pack 指定的数值和这个数据成员自身长度中,比较小的那个进行。


  2 、结构 ( 或联合 ) 的整体对齐规则:在数据成员完成各自对齐之后,结构 ( 或联合 ) 本身也要进行对齐,对齐将按照 #pragma pack 指定的数值和结构 ( 或联合 ) 最大数据成员长度中,比较小的那个进行。


  3 、结合 1 、 2 可推断:当 #pragma pack 的 n 值等于或超过所有数据成员长度的时候,这个 n 值的大小将不产生任何效果。 使用指令#pragma pack (n),编译器将按照 n个字节对齐。使用指令#pragma pack (),编译器将取消自定义字节对齐方式。在#pragma pack (n)和#pragma pack ()之间的代码按 n个字节对齐。


  struct s1


  {


  int a;


  char b;


  short e;


  int c;


  };


  struct s2


  {


  int a;


  char b;


  int c;


  short e;


  int d;


  };


  1字节对齐 为 11 和 15


  2字节对齐 为 11 和 16


  4字节对齐 为 12 和 20


  8字节对齐 为 12 和 20


  16字节对齐 为 12 和 20


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MFC中Silder控件及定时函数SetTim.. 下一篇随机函数rand()的猜数字游戏

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: