结构体对齐问题

本文回顾了笔试中遇到的结构体对齐问题,深入探讨了位域在64位和32位系统中的对齐规则。通过具体题目分析,解释了不同环境下结构体内存布局的计算方式,强调了联合体大小取决于最大变量尺寸的原则。
摘要由CSDN通过智能技术生成

复盘了一下笔试遭遇的结构体对齐问题

1、位域

int i:2;    // 表示变量i只占用2个bit位

题目1:64位系统,4字节对齐,声明如下:

struct s1{
	int i: 8;
	int j:4;
	int a:3;
	double b;
};
struct s2{
	int i: 8;
	int j: 4;
	double b;
	int a:3;
};
printf("%d\n", sizeof(s1));
printf("%d\n", sizeof(s2));

输出的结果是:16 24

s1:

64位中int占8字节,i变量占用8个bit,j占用4个bit,a占用3个bit,所以i、j、a总共15bit,没有超过8个字节;b没有指定位域,占用8个字节,总共16个字节

s2:

i变量8bit,j变量4bit,没有超过64bit,共用一个int(8字节),b变量占用8个字节,int占用3bit,但也是一个int(8字节),所以是24字节。

 

题目2:

32位系统,4字节对齐,对于以下声明:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值