标签: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 () /*取消指定对齐,恢复缺省对齐*/
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的对界)。
三:
标签:sizeof str ble 为什么 成员 ack 更新 定义 类型
原文地址:https://www.cnblogs.com/tianzeng/p/9038395.html