当前位置: 首页 > news >正文

【嵌入式撸码】内存相关的大小尽量偶数对齐

背景

嵌入式系统内存操作最好字节偶数对齐,不然有些平台可能直接崩溃。近日看了赋值代码,就是内存偶数对齐的,所以顺便做个总结记录和分享。

分析

一、代码及解析:
在这里插入图片描述
解析操作过程:
1.右移一位 (>> 1):将 iOriginWidth 右移一位,相当于将 iOriginWidth 除以 2,并抛弃最低位的那一位。

2.左移一位 (<< 1):再将右移后的结果左移一位,相当于将其乘以 2。因为之前右移丢弃了最低位的那一位,左移会在低位补0,所以这个操作的结果就是将 iOriginWidth 的最低位清零。

结果:这个操作的结果是将 iOriginWidth 的最低位(即二进制中的最后一位)清零,从而得到一个偶数。如果 iOriginWidth 原本就是偶数,那么 iWidth 会等于 iOriginWidth;如果 iOriginWidth 是奇数,那么 iWidth 会等于 iOriginWidth - 1。

二、区别和优势
区别:
1.直接赋值:如果使用 iWidth = iOriginWidth,iWidth 的值将和 iOriginWidth 完全相同,无论 iOriginWidth 是奇数还是偶数。
2.通过位运算赋值:使用 iWidth = ((iOriginWidth >> 1) << 1),可以确保 iWidth 的值一定是偶数。如果 iOriginWidth 是奇数,那么 iWidth 会变成比 iOriginWidth 小 1 的偶数;如果 iOriginWidth 是偶数,那么 iWidth 保持不变。

优势:
1.确保偶数值:这种位运算可以确保 iWidth 始终是一个偶数值,这在某些场景下可能是必要的,比如图像处理中的宽度要求是偶数,或者内存对齐需要偶数值。
2.性能:位运算通常比取模或其他数学操作要快,因为它直接操作二进制位,是 CPU 指令集支持的原子操作。因此,如果你需要确保一个值是偶数,这种方式可能比 iWidth = iOriginWidth - (iOriginWidth % 2) 更高效。

总结

将 iOriginWidth 通过位运算处理后再赋值给 iWidth 可以确保 iWidth 是偶数,而直接赋值无法做到这一点。这种操作在某些需要偶数值的情况下非常有用,并且相比其他方法更为高效。


http://www.mrgr.cn/news/19247.html

相关文章:

  • J.U.C Review - 阻塞队列原理/源码分析
  • https和harbor仓库跟k8s
  • Steam游戏截图方法
  • 如何判断字符串是否对称?
  • C语言 | Leetcode C语言题解之第394题字符串解码
  • Java中调用第三方接口
  • 语言桥梁:探索全球最受欢迎的翻译工具,让理解更简单
  • 3DMAX建筑魔术师MagicBuilding插件使用方法详解
  • jQuery基础——高级技巧
  • 软件测试方法之等价类测试
  • 【LVI-SAM】激光点云如何辅助视觉特征深度提取
  • 输入输出系统和中断总结
  • VUE3项目的几种创建方式
  • OpenCV从入门到精通——角点特征点提取匹配算法实战
  • ubuntu24和win11双系统,每次启动后Windows时间不正确的处理办法
  • TCP协议相关特性
  • Java并发编程之ThreadLocal深度探索
  • Linux 学习之路 - 信号的保存
  • 巧用xrename批量重命名下载的影视文件
  • 设置Kali Linux 24小时制,并同步时间