码迷,mamicode.com
首页 > 其他好文 > 详细

struct字节对齐方式...更新中

时间:2018-05-14 22:56:26      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:sizeof   str   ble   为什么   成员   ack   更新   定义   类型   

一:

#pragma pack (n)  //编译器将按照n个字节对齐
#pragma pack ()   //取消自定义字节对齐方式
 
#pragma pack (2) /*指定按2字节对齐*/
struct G{
  char b;
  int a;
  double d;
  short c;
};
#pragma pack () /*取消指定对齐,恢复缺省对齐*/
在结构体G中成员变量的最大对齐模数是sizeof(double)=8;又因为指定对齐模数是2;所以取其较小者2为结构体G的最大对齐模数;则sizeof(G)=2+4+8+2=16;由于16是2的整数倍,则不需要填充。
注意:如果#pragma pack (n)中指定的n大于结构体中最大成员的size,则其不起作用,结构体仍然按照size最大的成员进行对界。
二:

union u
{
 double a;
 int b;
};
union u2
{
 char a[13];
 int b;
};
union u3
{
 char a[13];
 char b;
};

都知道union的大小取决于它所有的成员中,占用空间最大的一个成员的大小。所以对于u来说,
大小就是最大的double类型成员a了,所以sizeof(u)=sizeof(double)=8。但是对于u2和u3,最
大的空间都是char[13]类型的数组,为什么u3的大小是13,而u2是16呢?关键在于u2中的成员
int b。由于int类型成员的存在,使u2的对齐方式变成4,也就是说,u2的大小必须在4的对界
上,所以占用的空间变成了16(最接近13的对界)。

三:

struct字节对齐方式...更新中

标签:sizeof   str   ble   为什么   成员   ack   更新   定义   类型   

原文地址:https://www.cnblogs.com/tianzeng/p/9038395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!