结构体的空间分配和位定义
Posted 何事误红尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体的空间分配和位定义相关的知识,希望对你有一定的参考价值。
概述
本文收录结构体相关的知识点,将遇到的相关问题和找到的解释说明集中在一起,便于需要时快速查找。
空间分配
请计算以下两个结构体所占用的空间大小:
struct CAT {
char a;
short b;
int c;
short d;
}cat;
struct DOG {
int a;
short b;
short c;
char d;
}dog;
可以看到,这两个结构体组成元素是相同的,只是定义时的顺序不同。使用sizeof查看占用的内存大小:
1个char+2个short+1个int,不应该是1+4+4=9吗,为什么会是12?空间分配的过程是怎么样的?
struct内存原则: 从上至下进行内存分配,对齐方式以当前分配到的内部成员类型最宽字节数为基准;整体以结构体成员最宽类型字节为基准,且整个结构体的总大小为最宽基本类型成员大小的整数倍。点击跳转
位定义
请用结构体表示以下一帧CAN信息:
11bit的ID、1bit的RTR、3bit的长度、8byte的数据,
要求使用的空间尽可能小。
从空间要求上看,可以知道这是考验对结构体位定义的使用:
struct CANFRAME {
uint16_t ID : 11;
uint16_t RTR : 1;
uint16_t LEN : 3;
uint8_t DATA[8];
}
需要注意,使用位定义的成员,类型应相同(更多解析)。
以上是关于结构体的空间分配和位定义的主要内容,如果未能解决你的问题,请参考以下文章