__packed 关键字 的作用

2023-05-16

在移植机智云的代码时,因为结构体里用了太多的变量,为了节省ram空间 所以加了个__packed关键字修饰。
举个例子:

struct {
    char a;    //1byte
    int b;    //4byte
    char c[2]    //2byte
    double d;    //8byte
}Struct_A;
在计算机内存中,结构体变量的存储通常是按字长对齐的,比如8位机里就按字节对齐,那么上述结构体共占用1+4+2+8=15byte。
在16位机里,变量就按照2字节对齐,比如a这个成员,虽然是个char类型,地址在0x80000000本身只占1字节,但是下一个成员b却不能使用0x80000001这个地址,而必须使用0x80000002,这就是按字长对齐。以上结构体占用的空间也就是2+4+2+8=16字节
同理,在32位机中,如果a在0x80000000的话,b只能放在0x80000004,因为这里的字长是4个字节。以上结构体占用空间4+4+4+8=20字节
也就是说总有一些字节是浪费掉的,这样做的目的很简单,就是因为在大多数计算机体系结构中,对内存操作时按整字存取才能达到最高效率,相当于是以空间换取时间。当然在某些计算机体系结构中,比如ARM,是支持非对齐字传输的,也就是说变量并不一定要按照字长对齐,尽管这样可能会降低效率,但换来的是存储空间上的节约。在mdk中加上__packed关键字,可以得到非对齐字的紧凑型结构体,则会强制编译器将结构体成员按1字节对齐,则以上结构体占用空间仍为15字节。
如果编译器不支持__packed关键字,将其定义为空宏即可  #define  __packed 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

__packed 关键字 的作用 的相关文章

  • Ubuntu下使用眼动仪Tobii Eye Tracker 4C

    01 安装 amp 使用 安装 使用过程参考 xff1a https github com Eitol tobii eye tracker linux installer 下面过程主要是github中自述文件的翻译 下载 在新终端 xff0
  • 深度学习之卷积

    01 卷积 卷积是指在滑动中提取特征的过程 xff0c 可以形象地理解为用放大镜把每步都放大并且拍下来 xff0c 再把拍下来的图片拼接成一个新的大图片的过程 2D卷积是一个相当简单的操作 xff1a 我们先从一个小小的权重矩阵 xff0c
  • Ubuntu 18.04 安装网卡驱动(有线连接)

    之前一直用小米的驱动 xff0c 但是感觉太慢了 xff0c 所以还是决定使用有线连接 但是之前进入Linux系统后 xff0c 有线连接没有 xff0c 所以需要安装驱动 01 查询网卡类型 xff08 Windows xff09 进入w
  • realsense d435i获取某像素点三维坐标(计算深度和点云两种方法)

    这篇写的比较详细但也比较乱 xff0c 另一篇思路更清晰和简介一点 xff0c 可供参考 xff1a Ubutntu下使用realsense d435i xff08 二 xff09 xff1a 获取某二维像素点的三维坐标 00 说明 代码1
  • Ubuntu18配置与ROS兼容的深度学习环境(Anaconda3+PyTorch1.10+python3.8+cuda10.2)

    之前在Window下安装了Anaconda xff0c 熟悉了一下安装过程 xff0c Ubuntu下最难的应该就是和ROS的兼容问题 ROS是基于Python2 7的 xff0c 而Anaconda3则是python3 看有的博文说需要先
  • Ubutntu下使用realsense d435i(三):使用yolo v5测量目标物中心点三维坐标

    01 参考 本文下述使用参考的的工程均来自于下面的两个github yolo v5参考的代码 xff1a https github com ultralytics yolov5本文参考的代码 xff08 仅获得深度 xff09 xff1a
  • 使用IAR embedded workbench for MCS-51编写的一个示例程序

    新下了一个IAR xff0c 不知道该IDE是否好用 xff0c 使用了一个程序测试了一下 xff0c 并烧到89c51上 include 34 ioAT89C51 h 34 void delayms unsigned int number
  • 如何查看ROS话题的频率

    可以使用rqt工具查看 rosrun rqt topic rqt topic 在话题名称前面选中就可以查看话题的type 频率以及发布的信息 感觉这个要比直接在命令行rostopic查看方便一点
  • UR+RealSense手眼标定(eye-to-hand)

    01 手眼标定的原理 基坐标系 xff08 base tree xff09 和相机 xff08 camera tree xff09 两个坐标系属于不同的tree xff0c 通过将标签贴到手上 xff0c 相机识别出标签的position和
  • Ubuntu18.04安装手控器

    参考 xff1a 官网教程 xff1a https s3 amazonaws com dl 3dsystems com binaries Sensable Linux Touch Device Drivers 2019 2 15 Linux
  • ros tf坐标

    参考 xff1a 讲解 xff1a https www bilibili com video BV1zt411G7Vn p 61 18 amp vd source 61 3a1ad336af3eaae4fcced56c75d309d1ROS
  • 使用代理时网页访问正常,git无法clone

    明明已经使用了vpn xff0c 命令行还git clone一直被拒绝 fatal unable to access span class token string 39 https github com pytorch vision 39
  • rosbag修复

    span class token comment 等待修复 xff0c 按照录制包的大小时间可能长也可能短 span rosbag reindex xxx bag active xff1b span class token comment
  • 【HNU-CSEE jetson nano 番外篇】jetson nano与显示器的连接

    前言 首先需要搞清楚VGA信号和HDMI信号的大致区别 二者都是主机与显示器之间传输图像的协议 xff0c 但HDMI传输的是图像数字信号 xff0c VGA传输的是图像模拟信号 xff0c 因而两者之间 xff0c 如果要进行切换的话 x
  • 【教程】简单5步教你手机制作寸照、证件照、照片回执

    我们日常生活中需要用到证件照的地方有很多 xff0c 求职入学 考试报名 办理证件 出国旅行等场合 xff0c 都离不开要用到电子证件照或纸质证件照 不想一遍遍跑照相馆的 xff0c 那就来学一学如何用手机直接生成证件照吧 xff0c 操作
  • Android5.0+ Camera专栏终结

    本文均属自己阅读源码的点滴总结 xff0c 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email gzzaigcn2009 64 163 com Software xff1a 系统源码Android5 1 寥寥几笔写在
  • 写给我的2013

    前沿 xff1a 代码看的累了 xff0c 在新的一年终于可以找点时间来回忆我的2013 想着要写点什么 xff0c 可是又没有什么可以写 因为回忆无非就是夹杂着些许痛苦与欢乐 写给我的2013 家 生活 xff1a 2013年 xff0c
  • 自动控制原理(4)——传递函数、典型环节的传递函数

    自动控制原理 xff08 4 xff09 传递函数 典型环节的传递函数 微分方程模型 优点 xff1a 是时间域的数学模型 xff0c 比较直观 xff0c 它用时间域的方式 xff0c 描述系统输入和输出变量之间的关系 在给定初始条件和输
  • FreeRTOS_第7章_任务的定义与任务切换的实现_任务调度部分程序详解

    目录 简介 xff1a 启动任务调度的流程图 xff1a 第一个任务调度启动相关程序注释 xff1a 主任务循环 xff0c 启动调度器顶级封装 指定TCB 修改PendSV 和 SysTick 的中断优先级为最低 呼叫系统调用 xff08
  • 写给我的2014——也写给我即将逝去的研究生生涯

    前言 xff1a 2014 1在写着代码的时写下了回忆 xff0c 2015 1在码着论文的时候开始写起消逝的2014 细细回忆 xff0c 真是又是那句老话 xff0c 时间过得真快 xff0c 1年过去了 xff1b 更快的是竟然都要毕

随机推荐