字节对齐规则

1 篇文章 0 订阅

四个重要的基本概念。

1.数据类型自身的对齐值:对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,其自身对齐值为4,double为8单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

#pragma pack (1)
typedef struct aa
{
	char a;
	int b;
}a;
#pragma pack ()
void function()
{
	a s;
	s.a = 1;
	s.b = 2;
	printf("%d",sizeof(s)); 
}
//这里字节对齐长度为1,所以调试结构的长度为5
#pragma pack (4)
typedef struct aa
{
	char a;
	int b;
}a;
#pragma pack ()
void function()
{
	a s;
	s.a = 1;
	s.b = 2;
	printf("%d",sizeof(s)); 
}
//这里字节对齐长度为4, char a 是一个字节,所以对齐字节后长度为4,调试结构的长度为8
struct s1
{
	char a;
	int b;
};

struct s2
{
	char c;
	s1 s;
	char d;
	double e;
};

//s2的长度会是多少呢?

void function()
{
	s2 a;
	printf("%d",sizeof(a));
};
//得出的结果为24字节.这里字节对齐长度为8,但是前面的相加宽度刚好是8的整数倍(char填充到4字节),所以c 4字节.a4字节,b4字节,d4字节,e8字节,一起就是24个字节
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值