位段内存分配计算例题

文章讲述了在C语言中,如何通过宏定义和结构定义计算内存分配,特别是当A=2和B=3时,结构`struct_Record_Struct`的内存需求。通过分析位段成员和内存对齐规则,解释了`pointer`分配9字节空间的原因。
摘要由CSDN通过智能技术生成

目录

题目

有如下宏定义和结构定义

#define MAX_SIZE A+B
struct _Record_Struct
{
	unsigned char Env_Alarm_ID : 4;
	unsigned char Para1 : 2;
	unsigned char state;
	unsigned char avail : 1;
}*Env_Alarm_Record;

struct _Record_Struct* pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);

当A=2, B=3时,pointer分配( )个字节的空间。

分析

本题考察位段的内存分配

  • 位段成员中的:数字表示此成员分配的内存占据的二进制位有数字
  • 若位段成员没有:数字,则表示成员分配的内存为他的类型本身占有的字节

例如:
struct _Record_Struct{ }*Env_Alarm_Record;位段中的:

  1. unsigned char Env_Alarm_ID : 4;表示成员Env_Alarm_ID所分配的内存为2个二进制位
  2. unsigned char state;表示成员state所分配的内存为char 类型所占有的内存 ---- 1个字节
  • 位段在VS中的分配为:
    位段内存按照一个字节从低位向高位使用,当剩余的空间不能满足下一个成员的使用时,就会重新开辟一个字节的空间

sizeof(struct _Record_Struct):
结构体向最长的char对齐,前两个位段成员一共4+2位,不足8位,合起来占1字节,最后一个位段成员单独1字节,加上第三个成员所占的1字节,一共3字节

  • #define执行的是查找替换

sizeof(struct _Record_Struct) * MAX_SIZE == sizeof(struct _Record_Struct) * A+B == 3 * 2+3 = 9

  • 所以pointer分配了9个字节的空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值