本文主要是介绍位段内存分配计算例题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 题目
- 分析
题目
有如下宏定义和结构定义
#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;
位段中的:
unsigned char Env_Alarm_ID : 4;
表示成员Env_Alarm_ID
所分配的内存为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个字节的空间
这篇关于位段内存分配计算例题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!