结构体的空间分配和位定义
目录
- 概述
- 空间分配
- 位定义
概述
本文收录结构体相关的知识点,将遇到的相关问题和找到的解释说明集中在一起,便于需要时快速查找。
空间分配
请计算以下两个结构体所占用的空间大小:
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];
}
需要注意,使用位定义的成员,类型应相同(更多解析)。
结构体的空间分配和位定义相关推荐
- C语言结构体存储空间分配的原则
C语言结构体存储空间分配的原则 我们在嵌入式编程中经常用到结构体,结构体内成员变量的声明顺序不同,会带来结构体整体存储空间大小的不同,这是因为在C语言里,结构体里元素存储要对齐,这个"对齐& ...
- C语言 结构体存储空间分配
这两天在看结构体,一直在琢磨结构体的存储空间分配的问题,琢磨了半天总算明白了.和大家分享一下,希望能有所帮助. 相信大家都知道结构体里元素存储要对齐吧,话虽是没错,只是这个"对齐" ...
- 2、采用结构体数组编写程序,定义一个含职工姓名、工作年限、工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超30年的职工加1000元工资,并输出工资变化后的所有职工的信息
2.采用结构体数组编写程序,定义一个含职工姓名.工作年限.工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超过30年的职工加1000元工资,并输出工资变化后的所有职工的信息(要求用下标 ...
- 结构体和联合体详解-定义及初始化
文章目录 前言 一.结构体 1.1结构体类型 1.2定义结构体变量 1.3 初始化结构体变量 1.4结构体变量的引用 二.结构体数组 2.1定义结构体数组 2.2初始化结构体数组 三.联合体 3.1初 ...
- C#总结:C#调用C++的动态库Dll遇到的问题[动态库调用/结构体指针调用/union共同体定义]
记录使用C#调用C++的生成的DLL手柄键盘驱动库包括****.sys(驱动文件)和****.dll(库文件)的全部问题. C#调用C++的库有两种:静态调用和动态调用 静态调用,使用.net 提供的 ...
- C++阶段01笔记08【结构体(基本概念、定义与使用、数组、指针、嵌套、const使用)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 8 结构体 8.1 结构体基本概念 8.2 结构体定义和使用 示例 8.3 结构体数组 示例 8.4 结构体指针 示例 8.5 ...
- linux gd结构体,U-Boot中gd的定义和使用
最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着.现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅. U-Boot源代码下载地 ...
- C语言结构体成员有函数的定义与使用
```c#include <stdio.h> typedef int (*FunHandle)(int, int); //定义 指向函数的指针 struct Example {int a; ...
- 结构体中函数应该怎样定义才能返回值_15 函数的基本使用
本文对应的视频讲解如下: 1.函数基础 python快速入门(一)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com 2.函数的返回值 https://www.bi ...
最新文章
- 8个方法解决90%的NLP问题
- 汇编语言 寄存器 2.9~2.12 总结
- jd-eclipse反编译插件的离线安装和使用
- 四步相移法怎么获得相位信息_如何拥有超强的学习能力?世界公认的费曼学习法了解一下...
- WPF 框架全构建环境虚拟机硬盘分享
- 数据挖掘技术在信用卡业务中的应用及实例分析
- android中设置lmargin简书,超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用...
- 微软11月补丁星期二值得关注的6个0day及其它
- Celery:routing
- 涉密计算机多用户审批表,涉密计算机及信息系统安全策略
- 勒索病毒全系列补丁下载链接
- Java 山上有一口缸可以装50升水,现在有15升。老和尚叫小和尚下山挑水,每次挑5升,要挑几次。
- 手把手教你搭建自己的微信公众号
- mysql 如何对集合进行遍历
- 快手发布《2021磁力引擎营销通案》,以信任基因赋能全域营销
- 买牛奶 (c++基础)
- vs2010打开需要安装 service pack1
- 费雪MOGAFX方程式是什么?(三)
- Android对应的版本号
- Java CsvReader 读取csv文件
热门文章
- 计算机点击右键出现错误,电脑右键个性化打不开了怎么办
- java stream流_恕我直言你可能真的不会java第4篇:Stream管道流Map操作
- 利用系统级别的光谱成像技术分析细胞器的互作组学
- c语言static知识点,C语言知识点集锦
- dell服务器r730老自动重启_Dell R730服务器安装windows server 2008 R2蓝屏问题
- python短信验证码_玩转python之获取短信验证码
- 云服务器怎么配置文件,云服务器网卡怎么配置文件
- win安装 lua php 扩展,window平台搭建Lua开发环境
- 系统学习NLP(二十三)--浅谈Attention机制的理解
- php ajax 域名查询,PHP+AJAX 域名查询 PHP 源代码