C语言中结构体结构怎么对齐

  介绍

这篇文章主要介绍“C语言中结构体结构怎么对齐”,在日常操作中,相信很多人在C语言中结构体结构怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“C语言中结构体结构怎么对齐”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

结构、相互关联的元素的集合,每个元素都有自己的内存空间,每个元素在内存中的存放是有先后顺序的,就是定义时候的顺序;一个结构所占的总的内存大小,并不是各个元素所占空间之和,而是存在字节对齐的问题。
结构中的每个元素相对于结构体的首地址的偏移量能被该元素的大小整除(某些编译器,如果该元素的大小比;4,则偏移量能被4整除即可)。
测试代码:

 [xdb@localhost 测试],美元cat  test.cpp
  # include  & lt; cstdio>
  # include  & lt; iostream>
  using  namespace 性传播疾病;
  # define  LL  long  long 
  struct  E1  {
  ,,,int ;, char  b;, char  c;
  }e1;
  struct  E2  {
  ,,,char  b;, int ;, char  c;
  }e2;
  struct  E3  {
  ,,,char ;, short  b;, int  c;, LL  d;
  }e3;
  struct  E4  {
  ,,,int  c;, LL  d;, char ;, short  b;
  }e4;
  struct  E5  {
  ,,,char  a1, a2, a3、a4、a5、a6;
  }e5;
  struct  E6  {
  ,,,char  a1, a2, a3;
  }e6;
  struct  E7  {
  ,,,struct  E5  elem5;
  ,,,struct  E6  elem6;
  ,,,LL ;
  }e7;
  struct  E8  {
  ,,,char  [9];
  }e8;
  struct  E9  {
  ,,,struct  E8  elem8;
  ,,,LL ;
  }e9;
  struct  E10  {
  ,,,char ;
  };
  int  main (), {
  ,,,把(“——祝辞,E1");
  ,,,cout  & lt; & lt;, sizeof (E1), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x  % x \ n",,, e1,,, e1.a,,, e1.b,,, e1.c),,,,,
  ,,,把(“——祝辞,E2");
  ,,,cout  & lt; & lt;, sizeof (E2), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x  % x \ n",,, e2,,, e2.b,,, e2.a,,, e2.c),,,,,
  ,,,把(“——祝辞,E3");
  ,,,cout  & lt; & lt;, sizeof (E3), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x  % x  % x \ n",,, e3,,, e3.a,,, e3.b,,, e3.c,,, e3.d),,,,,
  ,,,把(“——祝辞,E4");
  ,,,cout  & lt; & lt;, sizeof (E4), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x  % x  % x \ n",,, e4,,, e4.c,,, e4.d,,, e4.a,,, e4.b),,,,,
  ,,,把(“——祝辞,E5");
  ,,,cout  & lt; & lt;, sizeof (E5), & lt; & lt;, endl;
  ,,,把(“——祝辞,E6");
  ,,,cout  & lt; & lt;, sizeof (E6), & lt; & lt;, endl;
  ,,,把(“——祝辞,E7");
  ,,,cout  & lt; & lt;, sizeof (E7), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x  % x \ n",,, e7,,, e7.elem5,,, e7.elem6,,, e7.a);
  ,,,把(“——祝辞,E8");
  ,,,cout  & lt; & lt;, sizeof (E8), & lt; & lt;, endl;
  ,,,把(“——祝辞,E9");
  ,,,cout  & lt; & lt;, sizeof (E9), & lt; & lt;, endl;
  ,,,printf (“% x  % x  % x \ n",,, e9,,, e9.elem8,,, e9.a);
  ,,,把(“——祝辞,E10");
  ,,,cout  & lt; & lt;, sizeof (E10汽油),& lt; & lt;, endl;
  ,,,return  0;
  }
  [xdb@localhost 测试]$ 

编译,执行

 [xdb@localhost 测试]美元,g++, test.cpp  -o 测试
  (xdb@localhost 测试),美元/测试
  - - - - -在E1
  8
  6021 a0  6021 a0  6021 a4  6021 a5
  - - - - -在E2
  12
  6021 a8  6021 a8  6021 ac  6021 b0
  - - - - -在E3
  16
  6021年c0  6021 c0  6021 c2  6021 c4  6021 c8
  - - - - -在E4
  24
  6021年d0  6021 d0  6021 d8  6021 e0  6021 e2
  - - - - -在E5
  6
  - - - - -在E6
  3.
  - - - - -在E7
  24
  602200,602200,602200,602210
  - - - - -在E8
  9
  - - - - -在E9
  24
  602230,602230,602240
  - - - - -在E10
  1
  [xdb@localhost 测试]$ 

到此,关于“C语言中结构体结构怎么对齐”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

C语言中结构体结构怎么对齐