字节对齐问题

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

  规则:

  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

上一页12下一页

视频学习

我考网版权与免责声明

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

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

最近更新

社区交流

考试问答